users@jax-ws.java.net

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

From: Vivek Pandey <Vivek.Pandey_at_Sun.COM>
Date: Tue, 09 May 2006 23:19:52 -0700

Is the server (AS 8.2/9.0 or tomcat, whatever you're using) also using
the nightly jaxws jars? I guess the server side doesn't have the latest
jar as the client has. This bug was fixed recently (couple of weeks back).

can you try it by updating the jaxws jars on the server?

-vivek.

Anne Thomas Manes wrote:
> 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 <mailto:breadfan_at_gmx.de>* <
> breadfan_at_gmx.de <mailto: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
> <http://fss.o2.com/portal/input%7DcheckAddress>
> But the map contains the following entry :
> {{http://fss.o2.com/portal/services}checkAddress=com.sun.xml.ws.model.JavaMethod@e5ace9
> <http://fss.o2.com/portal/services%7DcheckAddress=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
> <http://fss.o2.com/portal/services>"
> targetNamespace="http://fss.o2.com/portal/services"
> xmlns:transport="http://fss.o2.com/portal/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
> <mailto:users-unsubscribe_at_jax-ws.dev.java.net>
> For additional commands, e-mail: users-help_at_jax-ws.dev.java.net
> <mailto:users-help_at_jax-ws.dev.java.net>
>
>

-- 
Vivek Pandey
Web Services Technologies and Standards
Sun Microsystems Inc.