2009-12-01 18 views
23

Non conoscendo nulla dei servizi Web, sto solo cercando di chiamare un servizio "isAlive" che è descritto da un wsdl.Come chiamare un servizio Web (descritto da un wsdl) da java

Questo mi sembra come qualcosa che dovrebbe prendere non più di 2-5 righe di codice, ma io non riesco a trovare nulla, ma lunghi esempi enormi che coinvolgono i pacchetti 3rd party ecc

qualcuno ha qualche idea? Se si suppone che sia sempre lunga, forse sarà apprezzata anche una buona spiegazione del perché debba essere così complicata. Sto usando Eclipse e il wsdl è SOAP.

+0

Si può fornire l'IDE usate? – JCasso

+0

Puoi guardare wsdl, che si tratti di SOAP o di qualsiasi altro protocollo? Immagino sia SOAP ma solo per essere sicuro. –

+0

È soap: xmlns: ns2 = "http://schemas.xmlsoap.org/soap/encoding e sto usando eclissi IDE – codekitty

risposta

4

Ci sono plugin per IDE che generano il codice necessario per consumare un servizio Web per te.

Dopo il plugin genera i metodi di base è sufficiente chiamare un servizio web simile:

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

Dai un'occhiata alla http://urbas.tk/index.php/2009/02/20/eclipse-plug-in-as-a-web-service-client/

+0

Ottimo collegamento Risolto il mio problema immediatamente –

5

JDK 6 è dotato di JAX-WS, tutto il necessario per sviluppare un client per un servizio web.

Sono in grado di trovare alcuni semplici esempi abbastanza per spedire, ma partono da https://jax-ws.dev.java.net/

Edit: Ecco un semplice esempio - un client per il servizio 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 

Crea PrimeClient. java che assomigliano:

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(); 
    } 
    } 
} 

Compilare ed eseguire:

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 
[email protected] 
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 
+0

Sei sicuro di non farlo chiama semplicemente la classe stessa? Non vedo alcuna chiamata di rete nel tuo codice? Funziona anche quando sei offline? –

+1

@AngeloNeuschitzer Il wdsl contiene l'indirizzo di rete e il codice generato si occupa di impostare la connessione a quel servizio.Questo ovviamente non funziona se sei offline poiché il server non sarà raggiungibile – nos

+2

Entrambi i link nella risposta sono morti. – tdgtyugdyugdrugdr

1

There are three ways to write a web service client

  1. delega dinamica
  2. dinamica interfaccia di richiamo (DII)
  3. cliente Applicazione

Esempio per Dynamic 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(); 
     } 
    } 
} 

I hope , this would solve your question.

+0

Questo sembra abbastanza semplice, ho intenzione di provare questo adesso. – codekitty

+0

eclipse non trova queste importazioni. quali pacchetti devo aggiungere al mio percorso di build? – codekitty

+0

Tutti i pacchetti sono forniti con JDK tranne "import dynamicproxy.HelloIF;", è possibile rimuovere questo pacchetto. – Tony

-2

La più semplice che ho trovato finora è di utilizzare la procedura guidata Idea IntelliJ che - utilizzando le librerie Metro - generare un piccolo frammento di codice che funziona bene con Java 6.

+0

downvote? È vero :) Funziona bene con Java 6 senza librerie aggiuntive, cioè. –

Problemi correlati