users@jax-ws.java.net

Re: Error in decoding SOAP Message / Dispatch method cannot be found due to namespace problem

From: Anne Thomas Manes <atmanes_at_gmail.com>
Date: Tue, 9 May 2006 08:30:42 -0400

According to your WSDL binding definition:

<soap:body parts="checkAddressRequestPart" use="literal"
namespace="http://fss.o2.com/portal/input"/>

The element should be in the "http://fss.o2.com/portal/input" namespace.
The jaxws service's map is wrong.

Anne


On 5/9/06, breadfan_at_gmx.de <breadfan_at_gmx.de> wrote:
>
> I have a webservice-wsdl (simplified for this testcase), generated the
> jaxb
> and jaxws java binding files and implemented the client and the server
> (J2SE
> Client) with JAX-WS (nightly 20060504). When I call the service, the
> following exception is thrown at the serverside during the parse of the
> soap
> message:
>
> 08.05.2006 17:50:18
> com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher.toMessageInfo
> SCHWERWIEGEND: Error in decoding SOAP Message
> Error in decoding SOAP Message at
> com.sun.xml.ws.encoding.soap.server.SOAPXMLDecoder.toInternalMessage(
> SOAPXMLDecoder.java:89)
> at
> com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher.toMessageInfo(
> SOAPMessageDispatcher.java:187)
> ...
> and more interesting below:
> Caused by: javax.xml.ws.soap.SOAPFaultException: Cannot find the dispatch
> method
>
> My Jaxws-client sends the following soap request:
>
> <?xml version="1.0" ?>
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
> "
> xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> <soapenv:Body>
> <ans:checkAddress xmlns:ans="http://fss.o2.com/portal/input">
> <checkAddressRequestPart>TestRequestString</checkAddressRequestPart>
> </ans:checkAddress>
> </soapenv:Body>
> </soapenv:Envelope>
>
> If you look at the ans:checkAddress, it is bound to the 'input' namespace
> (http://fss.o2.com/portal/input). The jaxws server implementation on the
> other side tries to find the correct java method in the method
> decodeDispatchMethod of com.sun.xml.ws.encoding.soap.server.SOAPXMLDecoder
> .
> It interrogates a hash map (mapping QNames to java methods) via the code
> :
> JavaMethod javaMethod = rtModel.getJavaMethod(name);
>
> If I debug, the parameter 'name' is :
> {http://fss.o2.com/portal/input}checkAddress
> But the map contains the following entry :
> {{
> http://fss.o2.com/portal/services}checkAddress=com.sun.xml.ws.model.JavaMethod@e5ace9
> }
>
> So the getJavaMethod-call obviously returns null, which causes the
> exception
> to be thrown.
>
> Looking at the soap message above, I think the client implementation of
> jax-ws does it wrong, because it binds the checkAddress-Tag to the input
> namespace. If you look at the wsdl below I would expect the
> targetNamespace
> of the wsdl here, but I don't know what's in the specs here, so I'm not
> sure. Has anyone more detailed infos here?
>
> Btw. I've already posted a bug defect (#14) for this.
>
>
> The wsdl:
> <?xml version="1.0" encoding="UTF-8"?>
> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:tns="http://fss.o2.com/portal/services"
> targetNamespace="http://fss.o2.com/portal/services"
> xmlns:transport="http://fss.o2.com/portal/transport">
> <wsdl:types>
> </wsdl:types>
> <wsdl:message name="checkAddressRequestMsg">
> <wsdl:part name="checkAddressRequestPart"
> type="xsd:string"/>
> </wsdl:message>
> <wsdl:message name="checkAddressResultMsg">
> <wsdl:part name="checkAddressResultPart"
> type="xsd:string"/>
> </wsdl:message>
> <wsdl:portType name="PortalEaiPortType">
> <wsdl:operation name="checkAddress">
> <wsdl:input message="tns:checkAddressRequestMsg"/>
> <wsdl:output message="tns:checkAddressResultMsg"/>
> </wsdl:operation>
> </wsdl:portType>
> <wsdl:binding name="PortalEaiBinding"
> type="tns:PortalEaiPortType">
> <soap:binding style="rpc"
> transport="http://schemas.xmlsoap.org/soap/http"/>
> <wsdl:operation name="checkAddress">
> <wsdl:documentation>The operation has no
> documentation</wsdl:documentation>
> <soap:operation style="rpc"
> soapAction="Portal_Portal2BPM_checkAddress"/>
> <wsdl:input>
> <soap:body parts="checkAddressRequestPart"
> use="literal"
> namespace="http://fss.o2.com/portal/input"/>
> </wsdl:input>
> <wsdl:output>
> <soap:body parts="checkAddressResultPart"
> use="literal"
> namespace="http://fss.o2.com/portal/output"/>
> </wsdl:output>
> </wsdl:operation>
> </wsdl:binding>
> <wsdl:service name="PortalEaiService">
> <wsdl:port name="PortalEaiHttpPort"
> binding="tns:PortalEaiBinding">
> <soap:address
> location="
> http://tibco13413008:2020/Business__Processes/Adapters/Portal/Inbound/portalEai
> "/>
> </wsdl:port>
> </wsdl:service>
> </wsdl:definitions>
>
> The java code of the testcase:
>
> // Server
> PortalEaiPortBugRepImpl portalEaiPortImpl = new
> PortalEaiPortBugRepImpl();
> Endpoint portalEaiEndpoint =
> Endpoint.publish("http://localhost:8080/jaxws-test/portalEai",
> portalEaiPortImpl);
>
> // Client Start
> PortalEaiService portalEaiService = new PortalEaiService();
> PortalEaiPortType portalEaiPortType =
> portalEaiService.getPortalEaiHttpPort();
>
> Map requestContext = ((BindingProvider)
> portalEaiPortType).getRequestContext();
> requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
> "http://localhost:82/jaxws-test/portalEai");
>
> String checkAddressResult =
> portalEaiPortType.checkAddress("TestRequestString");
>
> assertEquals("checkAddressResult.getOverallRemark()",
> "OverallRemark
> response",
> checkAddressResult);
>
> // Client end
>
> // Server stop
> portalEaiEndpoint.stop();
>
>
> The dummy server implementation:
>
> @WebService(endpointInterface =
> "com.o2.portal.fss.connector.jaxws.PortalEaiPortType")
> public class PortalEaiPortBugRepImpl implements PortalEaiPortType
> {
> public String checkAddress(String checkAddressRequest)
> {
> return "Response test string";
> }
> }
>
> Thanks in advance,
> Chris Wewerka
>
> --
> Analog-/ISDN-Nutzer sparen mit GMX SmartSurfer bis zu 70%!
> Kostenlos downloaden: http://www.gmx.net/de/go/smartsurfer
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jax-ws.dev.java.net
> For additional commands, e-mail: users-help_at_jax-ws.dev.java.net
>
>