Client de service Web donné WSDL


J'essaie de créer un client de service Web en Java. Je ne suis pas au courant de comment le faire. Ceci est une URL pour 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 existe trois méthodes dans le service.

J'essaie d'appeler cette méthode en utilisant 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> 

Toute personne qui connaît la solution, veuillez me le faire savoir. Toute aide est vraiment appréciable.

Author: bluish, 2010-11-13

4 answers

Comme laissé entendre dans un commentaire à La réponse de Jon, ma recommandation serait d'utiliser une implémentation JAX-WS comme JAX-WS RI (qui est inclus 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 unE avec un bon support JAX-WS, par exemple NetBeans (voir les ressources à la fin de la réponse).

1. Générer des artefacts JAX-WS à partir du WSDL

Première exécution 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ésolé si une partie du vocabulaire est cryptique mais, eh bien, bienvenue sur les services Web SOAP:)

2. Implémenter un client

Voici un client simple montrant comment invoquer l'une des opérations disponibles utilisation 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 d'identification vous êtes censé passer cependant.

Ressources

Questions connexes

 49
Author: Pascal Thivent, 2017-05-23 12:25:42

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 offre des commandes en ligne de commande wsimport et wsgen) sont des piles IMO bien meilleures et plus faciles à utiliser.

Alors, regardez la documentationApache CXF et l'introductionà JAX-WS .


D'Origine réponse

Avez-vous essayé d'utiliser Apache Axis? Cela fait un moment que je n'ai pas fait de services Web Java, mais c'est ce que j'ai utilisé la dernière fois... Vous voudrez regarder WSDL2Java pour générer du code à partir du WSDL.

 3
Author: Jon Skeet, 2010-11-13 13:18:44

En dehors de ce qui a été suggéré ci-dessus, vous pouvez également utiliser unE tel que Netbeans. Il vous permet essentiellement de créer un client webservice via des assistants, sans avoir à effectuer vous-même toutes les configurations. Cette vidéo vous montre comment créer d'abord un service Web, puis comment créer son client correspondant. Notez que dans la vidéo, celui qui fait le tutoriel consomme le webservice via une autre application Web. Si vous voulez consommer de l' webservice via une application de bureau, faites simplement 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.

 2
Author: npinti, 2010-11-13 11:22:45

Je recommanderais de jeter un oeil à Apache Axis2 ou Apache WSIF (Web Services Invocation Framework).

Liens:

 1
Author: Grodriguez, 2013-10-23 12:02:17