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...