Il client del servizio Web ha assegnato WSDL

Sto cercando di creare un client di servizi Web in Java. Non sono a conoscenza di come farlo. Questo è un URL per WSDL: https://testservices.gatewayedi.com/PayerList/payerlist.asmx?wsdl

Questo è il WSDL:

                                                                                                                                                                   

Ci sono tre metodi nel servizio.

Sto provando a chiamare questo metodo usando SOAP.

Il formato del messaggio XML è:

 POST /PayerList/payerlist.asmx HTTP/1.1 Host: testservices.gatewayedi.com Content-Type: application/soap+xml; charset=utf-8 Content-Length: <>     <>  <>        

Chiunque conosca la soluzione, per favore fatemelo sapere. Qualsiasi aiuto è davvero apprezzabile.

Come accennato in un commento alla risposta di Jon , la mia raccomandazione sarebbe quella di utilizzare un’implementazione JAX-WS come JAX-WS RI (che è incluso in Java 6) o Apache CXF.

Userò JAX-WS RI per illustrare la mia risposta in quanto è pronta all’uso, sulla riga di comando (per spiegare i passaggi), ma mi raccomando di usare un IDE con un buon supporto JAX-WS come NetBeans (vedi le risorse alla fine della risposta).

1. Genera risorse utente JAX-WS dal WSDL

Per prima cosa eseguire wsimport per generare artefatti JAX-WS (per dirla in parole semplici, le classi per cui è necessario richiamare il servizio Web):

 wsimport -d generated -extension -keep -p com.gatewayedi.ws -XadditionalHeaders https://testservices.gatewayedi.com/PayerList/payerlist.asmx?wsdl 

Informazioni sulle opzioni:

  • -d è usato per specificare la directory di destinazione per le cose generate
  • -extension viene utilizzata per consentire estensioni (WSDL utilizza un binding SOAP 1.2 non standard)
  • -keep è mantenere sorgenti .java generate (questo faciliterà lo sviluppo)
  • -p è usato per specificare un pacchetto per gli artefatti generati
  • -XadditionalHeaders viene utilizzato per mappare intestazioni WSDL aggiuntive (che non fanno parte del contratto di input o output definito nell’operazione portType ) ai parametri del metodo (ciò renderà più semplice il richiamo del servizio).

Scusate se alcuni dei vocaboli sono criptici ma, beh, benvenuti ai servizi web SOAP 🙂

2. Implementare un client

Ecco un semplice client che mostra come richiamare una delle operazioni disponibili usando le classi generate:

 import com.gatewayedi.ws.AuthSOAPHeader; import com.gatewayedi.ws.PayerList; import com.gatewayedi.ws.PayerListSoap; public class Main { public static void main(String[] args) { new Main().callWebService(); } private void callWebService() { PayerList service = new PayerList(); PayerListSoap port = service.getPayerListSoap(); AuthSOAPHeader authSOAPHeader = new AuthSOAPHeader(); authSOAPHeader.setUser("test"); authSOAPHeader.setPassword("test"); String payerList = port.ping(authSOAPHeader); System.out.println(payerList); } } 

Di seguito, la richiesta generata:

     test test       

Non so quali credenziali si dovrebbe passare però.

risorse

  • Sviluppo di client di servizio Web JAX-WS (inizia qui)
  • Presentazione di JAX-WS 2.0 con la piattaforma Java SE 6, parte 1
  • Creazione di un servizio Web semplice e client con JAX-WS
  • Creazione di un client SOAP con Apache CXF o GlassFish Metro (il blog di Glen Mazza è una grande risorsa)

Domande correlate

  • Client WebService Java (modo migliore)
  • Qual è il miglior framework di java webservice?

EDIT: Poichè Pascal sembra avere una recente esperienza su questo, probabilmente vale la pena leggere il suo commento:

Al giorno d’oggi, non userei Axis (in realtà mi raccomando di non usarlo). Apache CXF o JAX-WS RI (che è incluso in Java 6 e offre comandi da riga di comando wsimport e wsgen) sono IMO stack molto migliori e più facili da usare.

Quindi, guarda la documentazione di Apache CXF e l’ introduzione a JAX-WS .


Risposta originale

Hai provato ad usare Apache Axis ? È da un po ‘che non eseguo alcun servizio web Java, ma è quello che ho usato l’ultima volta … Volete dare un’occhiata a WSDL2Java per generare codice dal WSDL.

Oltre a ciò che è stato suggerito sopra, puoi anche usare un IDE come Netbeans . Fondamentalmente consente di creare un client di servizi Web tramite procedure guidate, senza dover eseguire autonomamente tutte le configurazioni. Questo video mostra come creare prima un webservice e poi come creare il client corrispondente. Si noti che nel video, chi sta facendo il tutorial consuma il webservice attraverso un’altra applicazione web. Se si desidera utilizzare il webservice tramite un’applicazione desktop, basta fare la stessa procedura, l’unica differenza è che anziché un progetto web, lo si fa sul progetto su cui si sta lavorando.

Vorrei raccomandare di dare un’occhiata ad Apache Axis2 o Apache WSIF (Web Services Invocation Framework).

link: