Client seems to be unable to read response from service

(This is on weblogic 8.1 SP2 using the JWSDP-1.6)

I'm getting the error below on the client side when I call the service using this code:

Stub stub = (Stub)(new DataExchanger_Impl().getDataExchangerSoap());

DataExchangerSoap hello = (DataExchangerSoap)stub;

String result = hello.exchangeData("user","23234-234234","confirm","xml data here");

out.println(result);

Given the stakc trace below I looked at the DataExchangerSoap_Stub class on line 70. This appears to be the client sending the data to the server.

_send((String) _getProperty(ENDPOINT_ADDRESS_PROPERTY), _state);

On the server I see the incoming data, process it and return an xml string:

<exchangeDataResult>

<status>OK</status>

<message>Transaction accepted.</message>

</exchangeDataResult>

No errors occur on the server. Looking at the stack trace from the client it seems it never even gets to the point where it trys to read the response.

What the hell does this error message mean?

[java] java.rmi.RemoteException: Runtime exception; nested exception is:

[java]unexpected element name: expected={https://partners.mcdata.com/}exchangeDataResponse, actual={http://partners.mcdata.com}exchangeDataResponse

[java]at com.sun.xml.rpc.client.StreamingSender._handleRuntimeExceptionInSend(Ljava.lang.RuntimeException;)V(StreamingSender.java:248)

[java]at com.sun.xml.rpc.client.StreamingSender._send(Ljava.lang.String;Lcom.sun.xml.rpc.client.StreamingSenderState;)V(StreamingSender.java:230)

[java]at com.mcdata.websvc.riverbed.server.DataExchangerSoap_Stub.exchangeData(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;)Ljava.lang.String;(DataExchangerSoap_Stub.java:70)

[java]at jsp_compiled.__index._jspService(Ljavax.servlet.http.HttpServletRequest;Ljavax.servlet.http.HttpServletResponse;)V(__index.java:134)

[java]at weblogic.servlet.jsp.JspBase.service(Ljavax.servlet.ServletRequest;Ljavax.servlet.ServletResponse;)V(JspBase.java:33)

[java]at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run()Ljava.lang.Object;(ServletStubImpl.java:971)

[java]at weblogic.servlet.internal.ServletStubImpl.invokeServlet(Ljavax.servlet.ServletRequest;Ljavax.servlet.ServletResponse;Lweblogic.servlet.internal.FilterChainImpl;)V(ServletStubImpl.java:402)

[java]at weblogic.servlet.internal.ServletStubImpl.invokeServlet(Ljavax.servlet.ServletRequest;Ljavax.servlet.ServletResponse;)V(ServletStubImpl.java:305)

[java]at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run()Ljava.lang.Object;(WebAppServletContext.java:6350)

[java]at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Lweblogic.security.subject.AbstractSubject;Ljava.security.PrivilegedAction;)Ljava.lang.Object;(AuthenticatedSubject.java:317)

[java]at weblogic.security.service.SecurityManager.runAs(Lweblogic.security.acl.internal.AuthenticatedSubject;Lweblogic.security.acl.internal.AuthenticatedSubject;Ljava.security.PrivilegedAction;)Ljava.lang.Object;(SecurityManager.java:118)

[java]at weblogic.servlet.internal.WebAppServletContext.invokeServlet(Lweblogic.servlet.internal.ServletRequestImpl;Lweblogic.servlet.internal.ServletResponseImpl;)V(WebAppServletContext.java:3635)

[java]at weblogic.servlet.internal.ServletRequestImpl.execute(Lweblogic.kernel.ExecuteThread;)V(ServletRequestImpl.java:2585)

[java]at weblogic.kernel.ExecuteThread.execute(Lweblogic.kernel.ExecuteRequest;)V(ExecuteThread.java:197)

[java]at weblogic.kernel.ExecuteThread.run()V(ExecuteThread.java:170)

[java]at java.lang.Thread.startThreadFromVM(Ljava.lang.Thread;)V(Unknown Source)

[java] Caused by: unexpected element name: expected={https://partners.mcdata.com/}exchangeDataResponse, actual={http://partners.mcdata.com}exchangeDataResponse

[java]at com.sun.xml.rpc.encoding.literal.LiteralObjectSerializerBase.internalDeserialize(Ljavax.xml.namespace.QName;Lcom.sun.xml.rpc.streaming.XMLReader;Lcom.sun.xml.rpc.encoding.SOAPDeserializationContext;)Ljava.lang.Object;(LiteralObject

SerializerBase.java:161)

[java]at com.sun.xml.rpc.encoding.literal.LiteralObjectSerializerBase.deserialize(Ljavax.xml.namespace.QName;Lcom.sun.xml.rpc.streaming.XMLReader;Lcom.sun.xml.rpc.encoding.SOAPDeserializationContext;)Ljava.lang.Object;(LiteralObjectSerializ

erBase.java:95)

[java]at com.mcdata.websvc.riverbed.server.DataExchangerSoap_Stub._deserialize_exchangeData(Lcom.sun.xml.rpc.streaming.XMLReader;Lcom.sun.xml.rpc.encoding.SOAPDeserializationContext;Lcom.sun.xml.rpc.client.StreamingSenderState;)V(DataExchan

gerSoap_Stub.java:117)

[java]at com.mcdata.websvc.riverbed.server.DataExchangerSoap_Stub._readFirstBodyElement(Lcom.sun.xml.rpc.streaming.XMLReader;Lcom.sun.xml.rpc.encoding.SOAPDeserializationContext;Lcom.sun.xml.rpc.client.StreamingSenderState;)V(DataExchangerS

oap_Stub.java:104)

[java]at com.sun.xml.rpc.client.StreamingSender._send(Ljava.lang.String;Lcom.sun.xml.rpc.client.StreamingSenderState;)V(StreamingSender.java:158)

[java]... 14 more

[5227 byte] By [zparticlea] at [2007-10-2 20:09:38]
# 1

I think I know what the problem is but I can't figure out what is causing it.

When I look at the SOAP message weblogic is sending back I see

<!--RESPONSE.................-->

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<env:Header>

</env:Header>

<env:Bodyenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<m:exchangeDataResponsexmlns:m="http://partners.mcdata.com">

<resultxsi:type="xsd:string"><exchangeDataResult>

<status>ERROR</status>

<message>XML failed validation:cvc-elt.1: Cannot find the declaration of element 'shippingResponse'. Column: 252 Line: 1</message>

</exchangeDataResult></result>

</m:exchangeDataResponse>

</env:Body>

</env:Envelope>

notice the namespace setting on the m:exchangeDataResponse element is http not https. Now look at this error message:

[java] java.rmi.RemoteException: Runtime exception; nested exception is:

[java]unexpected element name: expected={https://partners.mcdata.com/}exchangeDataResponse, actual={http://partners.mcdata.com}exchangeDataResponse

[java]at com.sun.xml.rpc.client.StreamingSender._handleRuntimeExceptionInSend(Ljava.lang.RuntimeException;)V(StreamingSender.java:248)

[java]at com.sun.xml.rpc.client.StreamingSender._send(Ljava.lang.String;Lcom.sun.xml.rpc.client.StreamingSenderState;)V(StreamingSender.java:230)

[java]at com.mcdata.websvc.riverbed.server.DataExchangerSoap_Stub.exchangeData(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;)Ljava.lang.String;(DataExchangerSoap_Stub.java:70)

[java]at jsp_compiled.__index._jspService(Ljavax.servlet.http.HttpServletRequest;Ljavax.servlet.http.HttpServletResponse;)V(__index.java:134)

[java]at weblogic.servlet.jsp.JspBase.service(Ljavax.servlet.ServletRequest;Ljavax.servlet.ServletResponse;)V(JspBase.java:33)

[java]at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run()Ljava.lang.Object;(ServletStubImpl.java:971)

The namespaces don't match, but I can't find anything in the code that is setting the namespace value for the response I'm sending.

zparticlea at 2007-7-13 22:50:08 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 2
Hi,Please post the wsdl. What is the namespace as it is defined in the wsdl?The jaxrpc client classes should have been generated from thiswsdl. Either the client or service is using the wrong namespace-Kathy
kwalsh1a at 2007-7-13 22:50:08 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 3

When I use

http://208.47.133.243/riverbedshipserver/exchangeData?WSDL

to view the WSDL what is returned has the non-ssl namespace in it and it doesn't match the WSDL I used to generated the service to begin with.

The WSDL doesn't get packaged into the service EAR file, should it? If so where is it supposed to be placed?

Where the heck is 8.1 getting that namespace setting that doesn't have the https in stead of http?

Here is the WSDL I used to create the service:

<?xml version="1.0" encoding="utf-8"?>

<wsdl:definitions

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"

xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"

xmlns:tns="https://partners.mcdata.com/"

xmlns:s="http://www.w3.org/2001/XMLSchema"

xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"

xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"

targetNamespace="https://partners.mcdata.com/"

xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

name="">

<wsdl:types>

<s:schema elementFormDefault="qualified" targetNamespace="https://partners.mcdata.com/">

<s:element name="exchangeData">

<s:complexType>

<s:sequence>

<s:element minOccurs="0" maxOccurs="1" name="sender" type="s:string" />

<s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />

<s:element minOccurs="0" maxOccurs="1" name="transactionType" type="s:string" />

<s:element minOccurs="0" maxOccurs="1" name="data" type="s:string" />

</s:sequence>

</s:complexType>

</s:element>

<s:element name="exchangeDataResponse">

<s:complexType>

<s:sequence>

<s:element minOccurs="0" maxOccurs="1" name="exchangeDataResult" type="s:string" />

</s:sequence>

</s:complexType>

</s:element>

</s:schema>

</wsdl:types>

<wsdl:message name="exchangeDataSoapIn">

<wsdl:part name="parameters" element="tns:exchangeData" />

</wsdl:message>

<wsdl:message name="exchangeDataSoapOut">

<wsdl:part name="parameters" element="tns:exchangeDataResponse" />

</wsdl:message>

<wsdl:portType name="DataExchangerSoap">

<wsdl:operation name="exchangeData">

<wsdl:input message="tns:exchangeDataSoapIn" />

<wsdl:output message="tns:exchangeDataSoapOut" />

</wsdl:operation>

</wsdl:portType>

<wsdl:binding name="DataExchangerSoap" type="tns:DataExchangerSoap">

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />

<wsdl:operation name="exchangeData">

<soap:operation soapAction="https://208.47.133.243/riverbedshipserver/exchangeData" style="document" />

<wsdl:input>

<soap:body use="literal" />

</wsdl:input>

<wsdl:output>

<soap:body use="literal" />

</wsdl:output>

</wsdl:operation>

</wsdl:binding>

<wsdl:service name="DataExchanger">

<wsdl:port name="DataExchangerSoap" binding="tns:DataExchangerSoap">

<soap:address location="https://208.47.133.243/riverbedshipserver/exchangeData" />

</wsdl:port>

</wsdl:service>

</wsdl:definitions>

zparticlea at 2007-7-13 22:50:08 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 4

found part of the problem, it was my web-service.xml file that had the wrong namepsace in it.

<web-services>

<web-service

name="riverbedshipserver"

targetNamespace="https://partners.mcdata.com/"

uri="exchangeData"

>

...

Now I'm getting another error.

zparticlea at 2007-7-13 22:50:08 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...