Hi all, I just try to get a JavaScript-Client (run from the Browser, based on http://riait.co.uk/2008/05/19/calling-web-services-from-javascript/) to connect to an Axis2 deployed WebService. The connection works fine, but I always get the error:
org.apache.axis2.databinding.ADBException: Unexpected subelement A friend of mine, uses a client generated also with Axis2 and Java does not get that error. So we tried to get the messages to be the same. First the relevant part of the wsdl file (I have copied it from the browser, and shortened it, hopefully without mistake. It has been automatically created): <WSDL> <wsdl:definitions targetNamespace="http://test.project.com"> - <wsdl:types> - <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://test.project.com"> <xs:import namespace="http://util.test.project.com"/> - <xs:element name="identify"> - <xs:complexType> - <xs:sequence> <xs:element minOccurs="0" name="username" nillable="true" type="xs:string"/> <xs:element minOccurs="0" name="password" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="identifyResponse"> - <xs:complexType> - <xs:sequence> <xs:element minOccurs="0" name="sessionID" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> - </xs:schema> - </wsdl:types> - <wsdl:message name="identifyRequest"> <wsdl:part name="parameters" element="ns:identify"> </wsdl:part> </wsdl:message> - <wsdl:message name="identifyResponse"> <wsdl:part name="parameters" element="ns:identifyResponse"> </wsdl:part> </wsdl:message> - <wsdl:portType name="testPortType"> - <wsdl:operation name="identify"> <wsdl:input message="ns:identifyRequest" wsaw:Action="urn:identify"> </wsdl:input> <wsdl:output message="ns:identifyResponse" wsaw:Action="urn:identifyResponse"> </wsdl:output> </wsdl:operation> </wsdl:portType> - <wsdl:binding name="testSoap12Binding" type="ns:testPortType"> <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> - <wsdl:operation name="identify"> <soap12:operation soapAction="urn:identify" style="document"/> - <wsdl:input> <soap12:body use="literal"/> </wsdl:input> - <wsdl:output> <soap12:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> - <wsdl:binding name="testSoap11Binding" type="ns:testPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> - <wsdl:operation name="identify"> <soap:operation soapAction="urn:identify" style="document"/> - <wsdl:input> <soap:body use="literal"/> </wsdl:input> - <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> - <wsdl:binding name="testHttpBinding" type="ns:testPortType"> <http:binding verb="POST"/> - <wsdl:operation name="identify"> <http:operation location="test/identify"/> - <wsdl:input> <mime:content part="identify" type="text/xml"/> </wsdl:input> - <wsdl:output> <mime:content part="identify" type="text/xml"/> </wsdl:output> </wsdl:operation> </wsdl:binding> - <wsdl:service name="test"> - <wsdl:port name="testHttpSoap12Endpoint" binding="ns:testSoap12Binding"> <soap12:address location="http://172.25.16.25:8080/axis2/services/test"/> </wsdl:port> - <wsdl:port name="testHttpSoap11Endpoint" binding="ns:testSoap11Binding"> <soap:address location="http://172.25.16.25:8080/axis2/services/test"/> </wsdl:port> - <wsdl:port name="testHttpEndpoint" binding="ns:testHttpBinding"> <http:address location="http://172.25.16.25:8080/axis2/services/test"/> </wsdl:port> </wsdl:service> </wsdl:definitions> </WSDL> First I tried to approach the WebService using Soap 1.1 (http://schemas.xmlsoap.org/soap/envelope) after having made the message similar to the one of my friend. This is the TCP/IP talk between my browser and the WebService (incorrect Content-Length due to changeing username/password): <TCPIP_SOAP11_REQUEST> POST /axis2/services/Test HTTP/1.1 Accept: */* Accept-Language: de Referer: http://172.25.16.25:8080/axis2/axis2-web/testpage/riait_test.html soapaction: urn:identify Content-Type: text/xml; charset=utf-8 UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) Host: 172.25.16.25:8080 Content-Length: 339 Connection: Keep-Alive Cache-Control: no-cache <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <ns:identify xmlns:ns="http://test.project.com/"> <ns:username>username</ns:username> <ns:password>password</ns:password> </ns:identify> </soapenv:Body></soapenv:Envelope> </TCPIP_SOAP11_REQUEST> The response was: <TCPIP_SOAP11_RESPONSE> HTTP/1.1 500 Internal Server Error Content-Type: text/xml;charset=utf-8 Transfer-Encoding: chunked Date: Fri, 23 May 2008 13:10:44 GMT Server: Apache-Coyote/1.1 Connection: close 154 <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault><faultcode>soapenv:Server</faultcode><faultstring>org.apache.axis2.databinding.ADBException: Unexpected subelement username</faultstring><detail /></soapenv:Fault></soapenv:Body></soapenv:Envelope> 0 </TCPIP_SOAP11_RESPONSE> The only difference between his message and mine was the Soap version, he is using Soap 1.2. So I tried to change the headers accordingly. <TCPIP_SOAP12_REQUEST> POST /axis2/services/Test HTTP/1.1 Accept: */* Accept-Language: de Referer: http://172.25.16.25:8080/axis2/axis2-web/testpage/riait_test.html Content-Type: application/soap+xml; charset=utf-8;action="urn:identify" UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) Host: 172.25.16.25:8080 Content-Length: 337 Connection: Keep-Alive Cache-Control: no-cache <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> <soapenv:Body> <ns:identify xmlns:ns="http://test.project.com/"> <ns:username>username</ns:username> <ns:password>password</ns:password> </ns:identify> </soapenv:Body></soapenv:Envelope> </TCPIP_SOAP12_REQUEST> With response: <TCPIP_SOAP12_RESPONSE> HTTP/1.1 500 Internal Server Error Content-Type: application/soap+xml; action="http://www.w3.org/2005/08/addressing/soap/fault";charset=utf-8 Transfer-Encoding: chunked Date: Fri, 23 May 2008 13:22:12 GMT Server: Apache-Coyote/1.1 Connection: close 1b5 <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><soapenv:Fault><soapenv:Code><soapenv:Value>soapenv:Receiver</soapenv:Value></soapenv:Code><soapenv:Reason><soapenv:Text xml:lang="en-US">org.apache.axis2.databinding.ADBException: Unexpected subelement username</soapenv:Text></soapenv:Reason><soapenv:Detail /></soapenv:Fault></soapenv:Body></soapenv:Envelope> 0 </TCPIP_SOAP12_RESPONSE> Furthermore the Soap1.2 has the effect, that the XMLHTTPRequest does not become aware of the finishing of the transmission (if I do not mistake, the Soap1.1 response has a trailing empty line, missing with the Soap1.2 response). Before I forget, this is the working request: <WORKING_REQUEST> POST /axis2/services/Test HTTP/1.1 Content-Type: application/soap+xml; charset=UTF-8; action="urn:getObject" User-Agent: Axis2 Host: 172.25.16.25:8090 Transfer-Encoding: chunked <?xml version='1.0' encoding='utf-8'?> <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> <soapenv:Body> <ns2:identify xmlns:ns2="http://test.project.com"> <ns2:username>username</ns2:username> <ns2:password>password</ns2:password> </ns2:identify> </soapenv:Body> </soapenv:Envelope> </WORKING_REQUEST> Perhaps anyone has any idea. My only guess up to now is, that the extra HTTP-Headers confuse the Axis2 message parser. Carsten -- Super-Acktion nur in der GMX Spieleflat: 10 Tage für 1 Euro. Über 180 Spiele downloaden und spiele: http://flat.games.gmx.de --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
