Comment appeler un service web (décrit par un wsdl) à partir de java

ne connaissant rien des services web, j'essaie juste d'appeler un service "isAlive" qui est décrit par un wsdl.

cela me semble comme quelque chose qui devrait prendre pas plus de 2-5 lignes de code, mais je ne peux pas trouver autre chose que de longs exemples énormes impliquant des paquets de tierce partie, etc.

quelqu'un a des idées? Si il est toujours supposé être long peut-être une bonne explication de pourquoi il a si compliqué sera également appréciée. J'utilise Eclipse et l' wsdl est du savon.

23
demandé sur giannis christofakis 2009-12-01 17:05:07

4 réponses

JDK 6 est livré avec jax-ws, tout ce dont vous avez besoin pour développer un client pour un service web.

je suis incapable de trouver quelques exemples assez simples pour poster, mais commencer à https://jax-ws.dev.java.net/

Edit: voici un exemple très simple, un client pour ce service web: http://xmethods.com/ve2/ViewListing.po?key=427565

C:\temp> md generated
C:\temp>"c:\Program Files\Java\jdk1.6.0_17"\bin\wsimport -keep -d generated http://www50.brinkster.com/vbfacileinpt/np.asmx?wsdl

Créer PrimeClient.java, qui ressemble à:

import javax.xml.ws.WebServiceRef;
import com.microsoft.webservices.*; 
//the above namespace is from the generated code from the wsdl. 

public class PrimeClient {
 //Cant  get this to work.. @WebServiceRef(wsdlLocation="http://www50.brinkster.com/vbfacileinpt/np.asmx?wsdl")
  static PrimeNumbers service;

  public static void main(String[] args) {
    try {
    service = new PrimeNumbers();
      PrimeClient client = new PrimeClient();
      client.doTest(args);
    } catch(Exception e) {
      e.printStackTrace();
    }
  }

  public void doTest(String[] args) {
    try {
      System.out.println("Retrieving the port from the following service: " + service);
      PrimeNumbersSoap pm = service.getPrimeNumbersSoap();
      System.out.println("Invoking the getPrimeNumbersSoap operation ");
      System.out.println(pm.getPrimeNumbers(100));
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
} 

Compiler et exécuter:

C:\temp>"c:\Program Files\Java\jdk1.6.0_17"\bin\javac -cp generated PrimeClient.java
C:\temp>"c:\Program Files\Java\jdk1.6.0_17"\bin\java -cp .;generated PrimeClient
Retrieving the port from the following service: com.microsoft.webservices.PrimeN
umbers@19b5393
Invoking the getPrimeNumbersSoap operation
1,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97
6
répondu nos 2009-12-01 15:13:13

Il y a des plugins pour IDE qui génèrent le code nécessaire pour consommer un service web pour vous.

d'Après le plugin génère vous les méthodes de base vous suffit d'appeler un service web comme ça:

TransportServiceSoap service = new TransportServiceLocator().getTransportServiceSoap();
service.getCities();

jetez un coup d'oeil à http://urbas.tk/index.php/2009/02/20/eclipse-plug-in-as-a-web-service-client/

4
répondu JCasso 2009-12-01 14:24:25

  1. Dynamic proxy
  2. Dynamic invocation interface (DII)
  3. application client

Exemple de Dynamique de Proxy Client

import java.net.URL;

import javax.xml.rpc.Service;

import javax.xml.rpc.JAXRPCException;

import javax.xml.namespace.QName;

import javax.xml.rpc.ServiceFactory;

import dynamicproxy.HelloIF;

public class HelloClient {

    public static void main(String[] args) {
        try {

            String UrlString = "Your WSDL URL";  // 
            String nameSpaceUri = "urn:Foo";
            String serviceName = "MyHelloService";
            String portName = "HelloIFPort";

            System.out.println("UrlString = " + UrlString);
            URL helloWsdlUrl = new URL(UrlString);

            ServiceFactory serviceFactory =
                ServiceFactory.newInstance();

            Service helloService =
                serviceFactory.createService(helloWsdlUrl, 
                new QName(nameSpaceUri, serviceName));

            dynamicproxy.HelloIF myProxy = 
                (dynamicproxy.HelloIF) 
                helloService.getPort(
                new QName(nameSpaceUri, portName), 
                dynamicproxy.HelloIF.class); 

            System.out.println(myProxy.sayHello("Buzz"));

        } catch (Exception ex) {
            ex.printStackTrace();
        } 
    } 
}  

j'espère que cela résoudra votre question.

1
répondu Tony 2011-12-15 15:27:02

le plus facile que j'ai trouvé jusqu'à présent à utiliser est L'idée IntelliJ wizard qui - en utilisant les bibliothèques Metro - générer un très petit Code snippet qui fonctionne bien avec Java 6.

-2
répondu Thorbjørn Ravn Andersen 2009-12-01 15:35:28