J'essaie de créer un client de service Web en Java. Je ne sais pas comment le faire. Il s'agit d'une URL pour WSDL: https://testservices.gatewayedi.com/PayerList/payerlist.asmx?wsdl
Voici le WSDL:
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://Microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="https://ws.gatewayedi.com/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="https://ws.gatewayedi.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="https://ws.gatewayedi.com/">
<s:element name="Ping">
<s:complexType />
</s:element>
<s:element name="PingResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="PingResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="AuthSOAPHeader" type="tns:AuthSOAPHeader" />
<s:complexType name="AuthSOAPHeader">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="User" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Password" type="s:string" />
</s:sequence>
<s:anyAttribute />
</s:complexType>
<s:element name="GetXMLPayerList">
<s:complexType />
</s:element>
<s:element name="GetXMLPayerListResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetXMLPayerListResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="getDocLinks">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="pid" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="getDocLinksResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="getDocLinksResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
<wsdl:message name="PingSoapIn">
<wsdl:part name="parameters" element="tns:Ping" />
</wsdl:message>
<wsdl:message name="PingSoapOut">
<wsdl:part name="parameters" element="tns:PingResponse" />
</wsdl:message>
<wsdl:message name="PingAuthSOAPHeader">
<wsdl:part name="AuthSOAPHeader" element="tns:AuthSOAPHeader" />
</wsdl:message>
<wsdl:message name="GetXMLPayerListSoapIn">
<wsdl:part name="parameters" element="tns:GetXMLPayerList" />
</wsdl:message>
<wsdl:message name="GetXMLPayerListSoapOut">
<wsdl:part name="parameters" element="tns:GetXMLPayerListResponse" />
</wsdl:message>
<wsdl:message name="GetXMLPayerListAuthSOAPHeader">
<wsdl:part name="AuthSOAPHeader" element="tns:AuthSOAPHeader" />
</wsdl:message>
<wsdl:message name="getDocLinksSoapIn">
<wsdl:part name="parameters" element="tns:getDocLinks" />
</wsdl:message>
<wsdl:message name="getDocLinksSoapOut">
<wsdl:part name="parameters" element="tns:getDocLinksResponse" />
</wsdl:message>
<wsdl:message name="getDocLinksAuthSOAPHeader">
<wsdl:part name="AuthSOAPHeader" element="tns:AuthSOAPHeader" />
</wsdl:message>
<wsdl:portType name="PayerListSoap">
<wsdl:operation name="Ping">
<wsdl:input message="tns:PingSoapIn" />
<wsdl:output message="tns:PingSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetXMLPayerList">
<wsdl:input message="tns:GetXMLPayerListSoapIn" />
<wsdl:output message="tns:GetXMLPayerListSoapOut" />
</wsdl:operation>
<wsdl:operation name="getDocLinks">
<wsdl:input message="tns:getDocLinksSoapIn" />
<wsdl:output message="tns:getDocLinksSoapOut" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="PayerListSoap" type="tns:PayerListSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="Ping">
<soap:operation soapAction="https://ws.gatewayedi.com/Ping" style="document" />
<wsdl:input>
<soap:body use="literal" />
<soap:header message="tns:PingAuthSOAPHeader" part="AuthSOAPHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetXMLPayerList">
<soap:operation soapAction="https://ws.gatewayedi.com/GetXMLPayerList" style="document" />
<wsdl:input>
<soap:body use="literal" />
<soap:header message="tns:GetXMLPayerListAuthSOAPHeader" part="AuthSOAPHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getDocLinks">
<soap:operation soapAction="https://ws.gatewayedi.com/getDocLinks" style="document" />
<wsdl:input>
<soap:body use="literal" />
<soap:header message="tns:getDocLinksAuthSOAPHeader" part="AuthSOAPHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="PayerListSoap12" type="tns:PayerListSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="Ping">
<soap12:operation soapAction="https://ws.gatewayedi.com/Ping" style="document" />
<wsdl:input>
<soap12:body use="literal" />
<soap12:header message="tns:PingAuthSOAPHeader" part="AuthSOAPHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetXMLPayerList">
<soap12:operation soapAction="https://ws.gatewayedi.com/GetXMLPayerList" style="document" />
<wsdl:input>
<soap12:body use="literal" />
<soap12:header message="tns:GetXMLPayerListAuthSOAPHeader" part="AuthSOAPHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getDocLinks">
<soap12:operation soapAction="https://ws.gatewayedi.com/getDocLinks" style="document" />
<wsdl:input>
<soap12:body use="literal" />
<soap12:header message="tns:getDocLinksAuthSOAPHeader" part="AuthSOAPHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="PayerList">
<wsdl:port name="PayerListSoap" binding="tns:PayerListSoap">
<soap:address location="https://testservices.gatewayedi.com/PayerList/payerlist.asmx" />
</wsdl:port>
<wsdl:port name="PayerListSoap12" binding="tns:PayerListSoap12">
<soap12:address location="https://testservices.gatewayedi.com/PayerList/payerlist.asmx" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Il existe trois méthodes dans le service.
J'essaie d'appeler cette méthode à l'aide de SOAP.
Le format de message XML est:
POST /PayerList/payerlist.asmx HTTP/1.1
Host: testservices.gatewayedi.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: <<insert message length here>>
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Header> <AuthSOAPHeader xmlns="https://ws.gatewayedi.com/"> <User><<insert user id here>>
</User>
<Password><<insert user web password here>> </Password>
</AuthSOAPHeader>
</soap12:Header> <soap12:Body> <Ping xmlns="https://ws.gatewayedi.com/" />
</soap12:Body>
</soap12:Envelope>
Quiconque connaît la solution, veuillez me le faire savoir. Toute aide est vraiment appréciable.
Comme indiqué dans un commentaire à réponse de Jon , ma recommandation serait d'utiliser une implémentation JAX-WS comme JAX-WS RI (qui est incluse dans Java 6) ou Apache CXF.
Je vais utiliser JAX-WS RI pour illustrer ma réponse car elle est disponible prête à l'emploi, sur la ligne de commande (pour expliquer les étapes) mais je recommanderais d'utiliser un IDE avec un bon JAX -Support WS par exemple NetBeans (voir les ressources à la fin de la réponse).
Exécutez d'abord wsimport
pour générer des artefacts JAX-WS (pour le dire simplement, les classes dont vous aurez besoin pour appeler le service Web):
wsimport -d generated -extension -keep -p com.gatewayedi.ws -XadditionalHeaders https://testservices.gatewayedi.com/PayerList/payerlist.asmx?wsdl
À propos des options:
-d
est utilisé pour spécifier le répertoire cible pour les éléments générés-extension
est utilisé pour autoriser les extensions (le WSDL utilise une liaison non standard SOAP 1.2)-keep
est de conserver généré .Java
sources (cela facilitera le développement)-p
est utilisé pour spécifier un package pour les artefacts générés-XadditionalHeaders
est utilisé pour mapper des en-têtes WSDL supplémentaires (qui ne font pas partie du contrat d'entrée ou de sortie défini dans l'opération portType
) aux paramètres de la méthode (cela facilitera l'appel du service) .Désolé si une partie du vocabulaire est cryptique, mais bien, bienvenue aux SOAP services Web :)
Voici un client simple montrant comment appeler l'une des opérations disponibles à l'aide des classes générées:
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);
}
}
Ci-dessous, la requête générée:
<?xml version="1.0" standalone="no"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<AuthSOAPHeader xmlns="https://ws.gatewayedi.com/">
<User>test</User>
<Password>test</Password>
</AuthSOAPHeader>
</S:Header>
<S:Body>
<Ping xmlns="https://ws.gatewayedi.com/"/>
</S:Body>
</S:Envelope>
Je ne sais pas quelles informations vous êtes censé passer.
EDIT: Comme Pascal semble avoir une expérience récente à ce sujet, cela vaut probablement la peine de lire son commentaire:
De nos jours, je n'utiliserais pas Axis (je recommande en fait de ne pas l'utiliser). Apache CXF ou JAX-WS RI (qui est inclus dans Java 6 et propose les commandes de ligne de commande wsimport et wsgen)) sont des piles IMO bien meilleures et plus faciles à utiliser.
Alors, regardez le documentation Apache CXF et le introduction à JAX-WS .
Réponse originale
Avez-vous essayé d'utiliser Apache Axis ? Cela fait un moment que je n'ai fait aucun Java services Web, mais c'est ce que j'ai utilisé la dernière fois ... Vous voudrez regarder WSDL2Java pour générer code du WSDL.
Outre ce qui a été suggéré ci-dessus, vous pouvez également utiliser un IDE tel que Netbeans . Il vous permet essentiellement de créer un client de service Web via des assistants, sans avoir à aller en faisant vous-même toutes les configurations. This la vidéo vous montre comment créer d'abord un webservice puis comment créer son client correspondant. Notez que dans la vidéo, celui qui fait le tutoriel consomme le webservice via un autre web Si vous souhaitez utiliser le service Web via une application de bureau, suivez la même procédure, la seule différence est qu'au lieu d'un projet Web, vous le faites sur le projet sur lequel vous travaillez.
Je recommanderais de jeter un œil à Apache Axis2 ou Apache WSIF (Web Services Invocation Framework).
Liens: