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).
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 🙂
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ò.
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: