Client de service Web donné WSDL
Je suis en train de créer un client de service web en Java. Je ne suis pas au courant de comment le faire. C'est une URL pour le fichier WSDL: https://testservices.gatewayedi.com/PayerList/payerlist.asmx?wsdl
C'est 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 y a trois méthodes dans le service.
Je suis en train d'appeler cette méthode à l'aide de SOAP.
Le message XML format:
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>
Quelqu'un qui connait la solution s'il vous plaît laissez-moi savoir.
Toute aide est vraiment appréciable.
Vous devez vous connecter pour publier un commentaire.
Comme évoqué dans un commentaire à Jon répondre, ma recommandation serait d'utiliser un JAX-WS mise en œuvre comme JAX-WS RI (qui est inclus dans la version 6 de Java) ou Apache CXF.
Je vais utiliser JAX-WS RI pour illustrer ma réponse comme il est disponible à la sortie de la boîte, sur la ligne de commande (pour expliquer les étapes), mais je vous recommande d'utiliser un IDE avec une bonne JAX-WS soutien par exemple NetBeans (voir les ressources à la fin de la réponse).
1. Générer JAX-WS artefacts à partir du WSDL
De la première exécution de
wsimport
pour générer JAX-WS artefacts (pour le dire simplement, les classes que vous aurez besoin d'invoquer le service web):Sur les options:
-d
est utilisé pour spécifier le répertoire cible pour l'généré des trucs-extension
est utilisé pour permettre des extensions (le WSDL est non standard SOAP 1.2 liaison)-keep
est de garder généré.java
sources (ce qui est la volonté de faciliter le développement)-p
est utilisé pour spécifier un package pour les artefacts produits-XadditionalHeaders
est utilisé pour carte supplémentaire WSDL en-têtes (qui ne font pas partie de l'entrée ou de la sortie du contrat défini dans leportType
) pour les paramètres de la méthode (cela permettra de faire en invoquant le service plus facile).Désolé si certains le vocabulaire est cryptique, mais, eh bien, bienvenue à SAVON services web 🙂
2. Mettre en œuvre un client
Ici est un client simple montrant comment appeler l'une des opérations disponibles en utilisant les classes générées:
Ci-dessous, à la génération de la demande:
Ne sais pas ce que les informations d'identification que vous êtes censé transmettre.
Ressources
Questions connexes
EDIT: Comme Pascal semble avoir de l'expérience récente sur ce, il vaut probablement la lecture de son commentaire:
Alors regardez la Apache CXF documentation et la introduction à JAX-WS.
Réponse originale à cette question
Avez-vous essayé d'utiliser Apache Axis? C'est un moment depuis que j'ai fait du Java, services web, mais c'est ce que j'ai utilisé la dernière fois... Vous aurez envie de chercher à WSDL2Java pour générer du code à partir du fichier WSDL.
En dehors de ce qui a été suggéré ci-dessus, vous pouvez également utiliser un IDE comme Netbeans. Il permet essentiellement de créer un service client par l'intermédiaire d'assistants, sans avoir à passer par toutes les configurations de vous-même. Cette vidéo vous montre comment créer un webservice et ensuite comment créer son client correspondant. Notez que dans la vidéo, celui qui est en train de faire le tutoriel utilise le service web à travers une autre application web. Si vous voulez consommer le service web par le biais d'une application de bureau, il suffit de faire la même procédure, la seule différence est qu'au lieu d'un webproject, vous le faites sur le projet sur lequel vous travaillez.
Je recommande de regarder Apache Axis2 ou Apache WSIF (Web Services Invocation Cadre).
Liens: