IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

Exceptions d'un client web service généré avec WSDL2Java d'Axis


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Par défaut Exceptions d'un client web service généré avec WSDL2Java d'Axis
    Bonjour,

    J'ai utilisé l'outil WSDL2Java d'Axis pour générer le stub d'un service web dont je connais le contrat WSDL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost:8080/Hello/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Hello" targetNamespace="http://localhost:8080/Hello/">
      <wsdl:types>
        <xsd:schema targetNamespace="http://localhost:8080/Hello/">
          <xsd:element name="sayHello">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="name" type="xsd:string"/>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
     
          <xsd:element name="sayHelloResponse">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="message" type="xsd:string"/>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:schema>
      </wsdl:types>
     
      <wsdl:message name="sayHelloRequest">
            <wsdl:part name="parameters" element="tns:sayHello"></wsdl:part>
      </wsdl:message>
     
      <wsdl:message name="sayHelloResponse">
        <wsdl:part element="tns:sayHelloResponse" name="parameters"/>
      </wsdl:message>
     
      <wsdl:portType name="Hello">
        <wsdl:operation name="sayHello">
          <wsdl:input message="tns:sayHelloRequest"/>
          <wsdl:output message="tns:sayHelloResponse"/>
        </wsdl:operation>
      </wsdl:portType>
     
      <wsdl:binding name="HelloSOAP" type="tns:Hello">
      	<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
      	<wsdl:operation name="sayHello">
      		<soap:operation soapAction="http://localhost:8080/Hello/sayHello" />
      		<wsdl:input>
      			<soap:body use="literal" />
      		</wsdl:input>
      		<wsdl:output>
      			<soap:body use="literal" />
      		</wsdl:output>
      	</wsdl:operation>
      </wsdl:binding>
     
      <wsdl:service name="Hello">
        <wsdl:port binding="tns:HelloSOAP" name="HelloSOAP">
          <soap:address location="http://localhost:8080/"/>
        </wsdl:port>
      </wsdl:service>
    </wsdl:definitions>
    Pour générer le stub en question, j'ai entré la commande :
    java org.apache.axis.wsdl.WSDL2Java Hello.wsdl
    Les 4 fichiers suivants ont été générés :
    - Hello_PortType.java
    - Hello_Service.java
    - Hello_ServiceLocator.java
    - HelloSOAPStub.java

    J'ai ensuite créé un projet Java sous Eclipse en incluant ces fichiers ainsi que les librairies d'Axis, puis j'ai codé le client suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    package client;
     
    import java.rmi.RemoteException;
     
    import javax.xml.rpc.ServiceException;
     
    import localhost.Hello.Hello_PortType;
    import localhost.Hello.Hello_Service;
    import localhost.Hello.Hello_ServiceLocator;
     
    public class HelloClient {
    	public static void main(String[] args) {
    		try {
    			Hello_Service service = new Hello_ServiceLocator();
    			Hello_PortType port = service.getHelloSOAP();
    			String name = "Christophe";
    			String message = port.sayHello(name);
     
    			System.out.println(message);
    		} catch(RemoteException e) {
    			e.printStackTrace();
    		} catch(ServiceException e) {
    			e.printStackTrace();
    		}
    	}
    }
    Toutefois, je rencontre l'exception suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    AxisFault
     faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
     faultSubcode: 
     faultString: org.xml.sax.SAXParseException: The processing instruction target matching &quot;[xX][mM][lL]&quot; is not allowed.
     faultActor: 
     faultNode: 
     faultDetail: 
    	{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXParseException: The processing instruction target matching &quot;[xX][mM][lL]&quot; is not allowed.
    	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanPIData(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanPIData(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanPI(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    	at javax.xml.parsers.SAXParser.parse(Unknown Source)
    	at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
    	at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
    	at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
    	at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
    	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
    	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    	at org.apache.axis.client.Call.invoke(Call.java:2767)
    	at org.apache.axis.client.Call.invoke(Call.java:2443)
    	at org.apache.axis.client.Call.invoke(Call.java:2366)
    	at org.apache.axis.client.Call.invoke(Call.java:1812)
    	at localhost.Hello.HelloSOAPStub.sayHello(HelloSOAPStub.java:107)
    	at client.HelloClient.main(HelloClient.java:20)
    Pourtant le service est correctement consommé lorsque j'entre l'URL http://localhost:8080/axis/services/...ame=Christophe dans un navigateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-8" ?> 
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<soapenv:Body>
    		<sayHelloResponse xmlns="">
    			<message>Hello Christophe !</message> 
    		</sayHelloResponse>
    	</soapenv:Body>
    </soapenv:Envelope>
    Une idée ?

    Merci à vous...

  2. #2
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Par défaut
    Il semblerait que le stub client ne doive pas être généré à partir du contrat WSDL que j'ai créé via l'assistant d'Eclipse (le client lève l'exception sus-citée), mais à partir du contrat WSDL légèrement modifié par Axis lors du déploiement du service web (dans ce cas, le client fonctionne correctement)...

    Voici le contrat WSDL modifié par Axis et accessible à l'URL http://localhost:8080/axis/services/HelloSOAP?wsdl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions targetNamespace="http://localhost:8080/Hello/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/Hello/" xmlns:intf="http://localhost:8080/Hello/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <!--WSDL created by Apache Axis version: 1.4
    Built on Apr 22, 2006 (06:55:48 PDT)-->
     <wsdl:types>
      <schema targetNamespace="http://localhost:8080/Hello/" xmlns="http://www.w3.org/2001/XMLSchema">
       <element name="sayHello">
        <complexType>
         <sequence>
          <element name="name" type="xsd:string"/>
         </sequence>
        </complexType>
       </element>
       <element name="sayHelloResponse">
        <complexType>
         <sequence>
          <element name="message" type="xsd:string"/>
         </sequence>
        </complexType>
       </element>
      </schema>
     </wsdl:types>
       <wsdl:message name="sayHelloResponse">
          <wsdl:part element="impl:sayHelloResponse" name="parameters"/>
       </wsdl:message>
       <wsdl:message name="sayHelloRequest">
          <wsdl:part element="impl:sayHello" name="parameters"/>
       </wsdl:message>
       <wsdl:portType name="Hello">
          <wsdl:operation name="sayHello">
             <wsdl:input message="impl:sayHelloRequest" name="sayHelloRequest"/>
             <wsdl:output message="impl:sayHelloResponse" name="sayHelloResponse"/>
          </wsdl:operation>
       </wsdl:portType>
       <wsdl:binding name="HelloSOAPSoapBinding" type="impl:Hello">
          <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
          <wsdl:operation name="sayHello">
             <wsdlsoap:operation soapAction="http://localhost:8080/Hello/sayHello"/>
             <wsdl:input name="sayHelloRequest">
                <wsdlsoap:body use="literal"/>
             </wsdl:input>
             <wsdl:output name="sayHelloResponse">
                <wsdlsoap:body use="literal"/>
             </wsdl:output>
          </wsdl:operation>
       </wsdl:binding>
       <wsdl:service name="Hello">
          <wsdl:port binding="impl:HelloSOAPSoapBinding" name="HelloSOAP">
             <wsdlsoap:address location="http://localhost:8080/axis/services/HelloSOAP"/>
          </wsdl:port>
       </wsdl:service>
    </wsdl:definitions>
    D'où l'affinement de ma question : pourquoi dois-je générer le stub client avec le contrat WSDL modifié par Axis et ne le puis-je pas avec le contrat WSDL que je crée avec l'assistant d'Eclipse (hormis Axis > moi...) ?

  3. #3
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Par défaut
    J'ai un peu poussé la complexité du service Hello précédent en un service HelloWSDL (histoire de les différencier) qui comporte toujours une opération sayHello mais qui prend cette fois-ci en paramètre un objet MyString qui correspond à une String limitée à 10 caractères maximum.

    Voici le contrat WSDL du nouveau service HelloWSDL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost:8080/HelloWSDL/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="HelloWSDL" targetNamespace="http://localhost:8080/HelloWSDL/">
      <wsdl:types>
        <xsd:schema targetNamespace="http://localhost:8080/HelloWSDL/">
          <xsd:element name="sayHello">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="name" type="tns:MyString"/>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
     
          <xsd:element name="sayHelloResponse">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="message" type="xsd:string"/>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
     
          <xsd:simpleType name="MyString">
          	<xsd:restriction base="xsd:string">
          		<xsd:maxLength value="10"></xsd:maxLength>
          	</xsd:restriction>
          </xsd:simpleType>
        </xsd:schema>
      </wsdl:types>
     
      <wsdl:message name="sayHelloRequest">
        <wsdl:part element="tns:sayHello" name="parameters"/>
      </wsdl:message>
     
      <wsdl:message name="sayHelloResponse">
        <wsdl:part element="tns:sayHelloResponse" name="parameters"/>
      </wsdl:message>
     
      <wsdl:portType name="HelloWSDL">
        <wsdl:operation name="sayHello">
          <wsdl:input message="tns:sayHelloRequest"/>
          <wsdl:output message="tns:sayHelloResponse"/>
        </wsdl:operation>
      </wsdl:portType>
     
      <wsdl:binding name="HelloWSDLSOAP" type="tns:HelloWSDL">
      	<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
      	<wsdl:operation name="sayHello">
      		<soap:operation
      			soapAction="http://localhost:8080/HelloWSDL/sayHello" />
      		<wsdl:input>
      			<soap:body use="literal" />
      		</wsdl:input>
      		<wsdl:output>
      			<soap:body use="literal" />
      		</wsdl:output>
      	</wsdl:operation>
      </wsdl:binding>
     
      <wsdl:service name="HelloWSDL">
        <wsdl:port binding="tns:HelloWSDLSOAP" name="HelloWSDLSOAP">
          <soap:address location="http://localhost:8080/"/>
        </wsdl:port>
      </wsdl:service>
    </wsdl:definitions>
    Si je tente encore d'écrire un client avec le stub généré à partir de ce contrat WSDL, j'obtiens toujours la même exception
    org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed.
    Toutefois, je ne peux cette fois-ci pas regénérer de stub à partir du contrat WSDL modifié par Axis et disponible à l'URL http://localhost:8080/axis/services/HelloWSDLSOAP?wsdl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions targetNamespace="http://localhost:8080/HelloWSDL/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/HelloWSDL/" xmlns:intf="http://localhost:8080/HelloWSDL/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <!--WSDL created by Apache Axis version: 1.4
    Built on Apr 22, 2006 (06:55:48 PDT)-->
       <wsdl:types>
          <schema targetNamespace="http://localhost:8080/HelloWSDL/" xmlns="http://www.w3.org/2001/XMLSchema">
             <element name="sayHello">
                <complexType>
                   <sequence>
                      <element name="name" type="impl:MyString"/>
                   </sequence>
                </complexType>
             </element>
     
             <complexType name="MyString">
                <simpleContent>
                   <extension/>
                </simpleContent>
             </complexType>
     
             <element name="sayHelloResponse">
                <complexType>
                   <sequence>
                      <element name="message" type="xsd:string"/>
                   </sequence>
                </complexType>
             </element>
          </schema>
       </wsdl:types>
     
       <wsdl:message name="sayHelloResponse">
          <wsdl:part element="impl:sayHelloResponse" name="parameters"/>
       </wsdl:message>
     
       <wsdl:message name="sayHelloRequest">
          <wsdl:part element="impl:sayHello" name="parameters"/>
       </wsdl:message>
     
       <wsdl:portType name="HelloWSDL">
          <wsdl:operation name="sayHello">
             <wsdl:input message="impl:sayHelloRequest" name="sayHelloRequest"/>
             <wsdl:output message="impl:sayHelloResponse" name="sayHelloResponse"/>
          </wsdl:operation>
       </wsdl:portType>
     
       <wsdl:binding name="HelloWSDLSOAPSoapBinding" type="impl:HelloWSDL">
          <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
          <wsdl:operation name="sayHello">
             <wsdlsoap:operation soapAction="http://localhost:8080/HelloWSDL/sayHello"/>
             <wsdl:input name="sayHelloRequest">
                <wsdlsoap:body use="literal"/>
             </wsdl:input>
             <wsdl:output name="sayHelloResponse">
                <wsdlsoap:body use="literal"/>
             </wsdl:output>
          </wsdl:operation>
       </wsdl:binding>
     
       <wsdl:service name="HelloWSDL">
          <wsdl:port binding="impl:HelloWSDLSOAPSoapBinding" name="HelloWSDLSOAP">
             <wsdlsoap:address location="http://localhost:8080/axis/services/HelloWSDLSOAP"/>
          </wsdl:port>
       </wsdl:service>
    </wsdl:definitions>
    J'obtiens l'erreur suivante :
    >java org.apache.axis.wsdl.WSDL2Java HelloWSDLSOAP.wsdl
    java.lang.NullPointerException
    at org.apache.axis.wsdl.toJava.JavaBeanWriter.preprocess JavaBeanWriter.java:295)
    at org.apache.axis.wsdl.toJava.JavaBeanWriter.<init>(JavaBeanWriter.java:160)
    at org.apache.axis.wsdl.toJava.JavaTypeWriter.getBeanWriter(JavaTypeWriter.java:174)
    at org.apache.axis.wsdl.toJava.JavaTypeWriter.<init>(JavaTypeWriter.java:89)
    at org.apache.axis.wsdl.toJava.JavaGeneratorFactory.getGenerator(JavaGeneratorFactory.java:318)
    at org.apache.axis.wsdl.gen.Parser.generateTypes(Parser.java:545)
    at org.apache.axis.wsdl.gen.Parser.generate(Parser.java:432)
    at org.apache.axis.wsdl.gen.Parser.access$000(Parser.java:45)
    at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:362)
    at java.lang.Thread.run(Unknown Source)
    J'ai l'impression que le problème vient de la partie relative au type MyString :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <complexType name="MyString">
       <simpleContent>
          <extension/>
       </simpleContent>
    </complexType>
    J'ai donc essayé d'adapter cette partie à partir de la partie correspondante de mon premier contrat WSDL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <simpleType name="MyString">
       <restriction base="xsd:string">
          <maxLength value="10"></maxLength>
       </restriction>
    </simpleType>
    Cette fois, la génération du stub se déroule correctement et le client fonctionne.

    Alors utilisé-je mal le premier stub généré pour écrire mon client (j'utilise le même code avec le second contrat modifié) ?
    Axis a-t-il des problèmes pour gérer les types définis par le développeur ?
    Pourquoi dois-je corriger le contrat WSDL modifié par Axis (et surtout pourquoi ne puis-je pas utiliser mon premier contrat WSDL ?) ?
    Avec l'outil WSDL2Java d'Axis2, je n'ai aucun problème pour écrire un client qui tourne avec le stub généré à partir du premier contrat WSDL présenté ici, mais il lance quant à lui l'exception suivante pour le second contrat WSDL erroné :
    Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

  4. #4
    oca
    oca est déconnecté
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 354
    Par défaut
    je me demande si il n'y a pas un bulle la dedans...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <wsdl:definitions targetNamespace="http://localhost:8080/HelloWSDL/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/HelloWSDL/" ... >
    
       <wsdl:types>
          <schema targetNamespace="http://localhost:8080/HelloWSDL/" xmlns="http://www.w3.org/2001/XMLSchema">
             <element name="sayHello">
                <complexType>
                   <sequence>
                      <element name="name" type="impl:MyString"/>
                   </sequence>
                </complexType>
             </element>
    le namespace impl n'est pas définit dans le tag "schema" je ne suis pas sur que les namespaces hérite des tags parents (dans ce cas précis, de "wsdl:definitions")... à vérifier...
    A+

  5. #5
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Par défaut
    Pour générer correctemet le stub client à partir du premier contrat WSDL (généré avec l'éditeur d'Eclipse)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost:8080/Hello/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Hello" targetNamespace="http://localhost:8080/Hello/">
      <wsdl:types>
        <xsd:schema targetNamespace="http://localhost:8080/Hello/">
          <xsd:element name="sayHello">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="name" type="xsd:string"/>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
     
          <xsd:element name="sayHelloResponse">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="message" type="xsd:string"/>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:schema>
      </wsdl:types>
     
      <wsdl:message name="sayHelloRequest">
            <wsdl:part name="parameters" element="tns:sayHello"></wsdl:part>
      </wsdl:message>
     
      <wsdl:message name="sayHelloResponse">
        <wsdl:part element="tns:sayHelloResponse" name="parameters"/>
      </wsdl:message>
     
      <wsdl:portType name="Hello">
        <wsdl:operation name="sayHello">
          <wsdl:input message="tns:sayHelloRequest"/>
          <wsdl:output message="tns:sayHelloResponse"/>
        </wsdl:operation>
      </wsdl:portType>
     
      <wsdl:binding name="HelloSOAP" type="tns:Hello">
      	<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
      	<wsdl:operation name="sayHello">
      		<soap:operation soapAction="http://localhost:8080/Hello/sayHello" />
      		<wsdl:input>
      			<soap:body use="literal" />
      		</wsdl:input>
      		<wsdl:output>
      			<soap:body use="literal" />
      		</wsdl:output>
      	</wsdl:operation>
      </wsdl:binding>
     
      <wsdl:service name="Hello">
        <wsdl:port binding="tns:HelloSOAP" name="HelloSOAP">
          <soap:address location="http://localhost:8080/"/>
        </wsdl:port>
      </wsdl:service>
    </wsdl:definitions>
    il suffit de remplacer dans la section service la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <soap:address location="http://localhost:8080/"/>
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <soap:address location="http://localhost:8080/axis/services/HelloWSDLSOAP"/>
    _________________________________________________________________


    Citation Envoyé par oca Voir le message
    je me demande si il n'y a pas un bulle la dedans...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <wsdl:definitions targetNamespace="http://localhost:8080/HelloWSDL/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/HelloWSDL/" ... >
    
       <wsdl:types>
          <schema targetNamespace="http://localhost:8080/HelloWSDL/" xmlns="http://www.w3.org/2001/XMLSchema">
             <element name="sayHello">
                <complexType>
                   <sequence>
                      <element name="name" type="impl:MyString"/>
                   </sequence>
                </complexType>
             </element>
    le namespace impl n'est pas définit dans le tag "schema" je ne suis pas sur que les namespaces hérite des tags parents (dans ce cas précis, de "wsdl:definitions")... à vérifier...
    A+
    Je pense que l'héritage a bien lieu car il n'y a aucun problème pour le premier contrat WSDL par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost:8080/HelloWSDL/" ... >
      <wsdl:types>
        <xsd:schema targetNamespace="http://localhost:8080/HelloWSDL/">
          <xsd:element name="sayHello">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="name" type="tns:MyString"/>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
    Et même en redéfinissant le namespace impl dans le tag "schema", cela ne change rien...

    De toute façon, la définition du type MyString est manifestement erronée dans le WSDL généré par Axis (pas de type de base, pas de restriction) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <complexType name="MyString">
       <simpleContent>
          <extension/>
       </simpleContent>
    </complexType>

Discussions similaires

  1. Problème génération client web service avec CXF(wsdl2java)
    Par riadhhwajdii dans le forum Services Web
    Réponses: 0
    Dernier message: 19/06/2014, 12h04
  2. [Débutant] Client Web Service avec wsdl seul
    Par grinder59 dans le forum Langages
    Réponses: 2
    Dernier message: 21/11/2013, 13h33
  3. [1.x] fonctionnement d'un web service REST avec le client
    Par safa.nasich dans le forum Symfony
    Réponses: 0
    Dernier message: 29/06/2011, 15h33
  4. Consommer un web service C# avec un client PHP
    Par legide dans le forum Services Web
    Réponses: 4
    Dernier message: 24/12/2009, 16h54
  5. Client Web Service
    Par caro. dans le forum Services Web
    Réponses: 3
    Dernier message: 08/04/2005, 16h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo