axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Anne Thomas Manes <atma...@gmail.com>
Subject Re: Converting RPC/Enc web service to RPC/Lit - SimpleDeserializer exception
Date Mon, 18 Apr 2005 16:12:15 GMT
Please send me the original rpc/encoded WSDL.

See my blog for info about wrapped style:
http://atmanes.blogspot.com/2005/03/wrapped-documentliteral-convention.html
Also see the Axis wiki:
http://wiki.apache.org/ws/FrontPage/Axis/Wrapped 

There is no such thing as wsdl style="wrapped". From a wsdl
perspective, the only style options are "rpc" and "document".

Anne

On 4/18/05, Timothy Thorpe <timothy.thorpe@criticalpath.net> wrote:
> Anne
> 
> In fact, my previous email may be misleading.
> 
> To convert the web service WSDL from 'RPC/Lit' to 'Wrapped/Lit' I did not
> use 'JavaToWSDL' but instead had simply replaced the WSDL's binding style
> "rpc" to "wrapped" at the line:
> 
>       <wsdlsoap:binding style="wrapped"
> transport="http://schemas.xmlsoap.org/soap/http"/>
> 
> On reflection I suspect that this would not be sufficient to generate a true
> 'Wrapped/Lit' WSDL file from which to generate the client stub.
> 
> However, my attempt to actually use Axis 1.1 "Java2WSDL -y WRAPPED -u
> LITERAL" to generate the 'Wrapped/Literal' WSDL from my Java skeleton fails.
> 
> I have attached the failure. Also the Java skeleton code.
> 
> It would be great if you could tell me what has gone wrong with JavaToWSDL
> here.
> 
> Many Thanks,
> Tim
> 
> -----Original Message-----
> From: Timothy Thorpe [mailto:timothy.thorpe@criticalpath.net]
> Sent: 18 April 2005 09:05
> To: 'axis-user@ws.apache.org'; 'Anne Thomas Manes'
> Subject: RE: Converting RPC/Enc web service to RPC/Lit - SimpleDeserializer
> exception
> 
> Anne
> 
> Thank you for your response.
> 
> I will try my RPC/Lit with Axis 1.2 - with a view to persuading my customer
> to upgrade in the near future.
> 
> In the meantime, as 1.1 is the version in use on our 'live' system, I have
> tried wrapped/literal with Axis 1.1 (JavaToWSDL to generate the WSDL,
> WSDLToJava to generate the client stub) - & see the exact same failure at
> the web service.
> 
> I would be most grateful if you could look at the attached evidence (WSDL
> included this time, as well as WSDDs + 2x tcpmon traces; showing a
> successful RPC/Enc exchange & the unsuccessful Wrapped/Lit exchange) &
> hopefully tell me what I am doing wrong ?
> 
> Rgds,
> Tim
> 
> -----Original Message-----
> From: Anne Thomas Manes [mailto:atmanes@gmail.com]
> Sent: 15 April 2005 19:41
> To: axis-user@ws.apache.org
> Subject: Re: Converting RPC/Enc web service to RPC/Lit - SimpleDeserializer
> exception
> 
> Try switching to wrapped document/literal style or upgrading to Axis
> 1.2. Axis 1.1 doesn't really support RPC/Literal.
> 
> (Also, in the future, please include the WSDL file when requesting
> assistance.)
> 
> Anne
> 
> On 4/15/05, Timothy Thorpe <timothy.thorpe@criticalpath.net> wrote:
> >
> >
> >
> > Could the problem here be that the parameter to the client method invoked
> is
> > of type 'java.util.HashMap' & so I have to inform the web service to use
> an
> > appropriate deserializer for the resultant '<hUserDtls>' node in the SOAP
> > Body (otherwise it will just use a default, & inappropriate in this case,
> > SimpleDeserializer) ?
> >
> >
> >
> > If so, I how do I inform the web service which deserializer to use for a
> > given method parameter ?
> >
> >
> >
> > Fuller extract of client 'SoapBindingStub' generated by WSDLToJava:
> >
> >
> >
> >     public TSMAdapter_RPC_Lit.TSMAdapterResponse
> > addUser(java.util.HashMap hUserDtls) throws java.rmi.RemoteException,
> > TSMAdapter_RPC_Lit.TSMAdapterFault {
> >
> >         if (super.cachedEndpoint == null) {
> >
> >             throw new
> > org.apache.axis.NoEndPointException();
> >
> >         }
> >
> >         org.apache.axis.client.Call _call = createCall();
> >
> >         _call.setOperation(_operations[0]);
> >
> >         _call.setUseSOAPAction(true);
> >
> >         _call.setSOAPActionURI("");
> >
> >         _call.setEncodingStyle(null);
> >
> >
> > _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR,
> > Boolean.FALSE);
> >
> >
> > _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS,
> > Boolean.FALSE);
> >
> >
> > _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
> >
> >         _call.setOperationName(new
> > javax.xml.namespace.QName("urn:TSMAdapter_RPC_Lit", "addUser"));
> >
> >
> >
> >         setRequestHeaders(_call);
> >
> >         setAttachments(_call);
> >
> >         java.lang.Object _resp = _call.invoke(new java.lang.Object[]
> > {hUserDtls});
> >
> >
> >
> >         if (_resp instanceof java.rmi.RemoteException) {
> >
> >             throw (java.rmi.RemoteException)_resp;
> >
> >         }
> >
> >         else {
> >
> >             extractAttachments(_call);
> >
> >             try {
> >
> >                 return
> > (TSMAdapter_RPC_Lit.TSMAdapterResponse) _resp;
> >
> >             } catch (java.lang.Exception _exception) {
> >
> >                 return
> > (TSMAdapter_RPC_Lit.TSMAdapterResponse)
> > org.apache.axis.utils.JavaUtils.convert(_resp,
> > TSMAdapter_RPC_Lit.TSMAdapterResponse.class);
> >
> >             }
> >
> >         }
> >
> >     }
> >
> >
> >
> > Tim
> >
> >
> >
> > -----Original Message-----
> >  From: Timothy Thorpe [mailto:timothy.thorpe@criticalpath.net]
> >  Sent: 15 April 2005 14:36
> >  To: axis-user@ws.apache.org
> >  Subject: Converting RPC/Enc web service to RPC/Lit - SimpleDeserializer
> > exception
> >
> >
> >
> >
> > Hello all
> >
> >
> >
> > My web service is running AXIS 1.1.
> >
> >
> >
> > To improve performance of my AXIS web service I have converted it, and its
> > client, from RPC/Encoded to RPC/Literal, in an effort to reduce message
> size
> > by dropping the 'over-the-top' multiRefs & types.
> >
> >
> >
> > Now my client (which was working with the web service fine when using
> > RPC/Encoded) gets the following exception back from the web service:
> >
> >
> ----------------------------------------------------------------------------
> -------------------------------------------
> >
> > Axis Fault code:
> > {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
> >
> > Axis Fault string: org.xml.sax.SAXException: SimpleDeserializer
> encountered
> > a child element, which is NOT expected, in something it was trying to
> > deserialize.
> >
> >
> ----------------------------------------------------------------------------
> -------------------------------------------
> >
> >
> >
> > I will summarise below what I have done to convert service & client from
> > RPC/Encoded to RPC/Literal - perhaps someone can tell me the glaringly
> > obvious step I have failed to do ?
> >
> >
> >
> > Many Thanks,
> >
> > Tim
> >
> >
> >
> > Step 1: I re-deployed the web service to use 'RPC/Lit' by specifying the
> > 'user' attribute to the <service> node in my WSDD file, thus:
> >
> >
> ----------------------------------------------------------------------------
> -------------------------------------------
> >
> > <deployment name="test"
> > xmlns="http://xml.apache.org/axis/wsdd/"
> >
> >
> > xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
> >
> >
> >
> >   <service name="TSMAdapter_RPC_Lit" style="RPC" use="literal">
> >
> >     <parameter name="className" value="net.cp.adapter.TSMAdapter"/>
> >
> >     <parameter name="allowedMethods" value="addUser, modifyUser,
> deleteUser,
> > renameUser"/>
> >
> >     <parameter name="allowedRoles" value="memum"/>
> >
> >     <parameter name="wsdlServicePort" value="TSMAdapter_RPC_Lit"/>
> >
> >
> >
> >     <operation name="addUser">
> >
> >        <parameter name="hUserDtls"/>
> >
> >     </operation>
> >
> >
> >
> >     <operation name="modifyUser">
> >
> >        <parameter name="hUserDtls"/>
> >
> >     </operation>
> >
> >
> >
> >     <operation name="deleteUser">
> >
> >        <parameter name="hUserDtls"/>
> >
> >     </operation>
> >
> >
> >
> >     <operation name="renameUser">
> >
> >        <parameter name="hUserToRenameDtls"/>
> >
> >        <parameter name="hUserNewDtls"/>
> >
> >     </operation>
> >
> >
> >
> >     <beanMapping qname="responseNS:TSMAdapterFault"
> > xmlns:responseNS="urn:TSMAdapter"
> >
> >
> languageSpecificType="java:net.cp.adapter.TSMAdapterFault"/>
> >
> >     <beanMapping qname="responseNS:TSMAdapterResponse"
> > xmlns:responseNS="urn:TSMAdapter"
> >
> >
> > languageSpecificType="java:net.cp.adapter.TSMAdapterResponse"/>
> >
> >
> >
> >       <typeMapping
> >
> >         xmlns:ns="http://content.services.hrs.harris.com/"
> >
> >         qname="ns:ProgramContent"
> >
> >
> > type="java:com.harris.hrs.services.content.ProgramContent"
> >
> >
> > serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
> >
> >
> > deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
> >
> >         encodingStyle=""
> >
> >       />
> >
> >
> >
> >     <requestFlow name="checks">
> >
> >       <handler
> > type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
> >
> >       <handler
> > type="java:org.apache.axis.handlers.SimpleAuthorizationHandler"/>
> >
> >     </requestFlow>
> >
> >   </service>
> >
> >
> >
> > </deployment>
> >
> >
> ----------------------------------------------------------------------------
> -------------------------------------------
> >
> >
> >
> > Step 2: I used JavaToWSDL with the "-y RPC -u LITERAL" parameters to
> create
> > a new 'RPC/Lit' WSDL for the service.
> >
> > Step 3: I used WSDLToJava to build client stubs from this 'RPC/Lit' WSDL
> > file.
> >
> >
> >
> > I can now see the following reassuring settings in my new client
> > 'SoapBindStub':
> >
> >
> ----------------------------------------------------------------------------
> -------------------------------------------
> >
> >         org.apache.axis.client.Call _call = createCall();
> >
> >         _call.setOperation(_operations[0]);
> >
> >         _call.setUseSOAPAction(true);
> >
> >         _call.setSOAPActionURI("");
> >
> >         _call.setEncodingStyle(null);
> >
> >
> > _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR,
> > Boolean.FALSE);
> >
> >
> > _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS,
> > Boolean.FALSE);
> >
> >
> > _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
> >
> >         _call.setOperationName(new
> > javax.xml.namespace.QName("urn:TSMAdapter_RPC_Lit", "addUser"));
> >
> >
> ----------------------------------------------------------------------------
> -------------------------------------------
> >
> >
> >
> > I have used the AXIS TCP monitor to check on the client's SOAP Request and
> > see the following, which matches the old RPC/Enc version BUT WITHOUT the
> > multiRefs & types:
> >
> >
> ----------------------------------------------------------------------------
> -------------------------------------------
> >
> > POST /TSMAdapter_RPC_Lit/services/TSMAdapter HTTP/1.0
> >
> > Content-Type: text/xml; charset=utf-8
> >
> > Accept: application/soap+xml, application/dime, multipart/related, text/*
> >
> > User-Agent: Axis/1.1
> >
> > Host: 127.0.0.1
> >
> > Cache-Control: no-cache
> >
> > Pragma: no-cache
> >
> > SOAPAction: ""
> >
> > Content-Length: 1826
> >
> > Authorization: Basic bWVtdW06U2NvdHQxc2g=
> >
> >
> >
> > <?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>
> >
> >   <addUser xmlns="urn:TSMAdapter_RPC_Lit">
> >
> >    <hUserDtls xmlns="">
> >
> >     <item
> > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
> > xmlns:ns1="http://xml.apache.org/xml-soap">
> >
> >      <key>password</key>
> >
> >      <value>p</value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>diskquota</key>
> >
> >      <value>2048</value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>contextID</key>
> >
> >      <value>qwerty1234_1113550647291</value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>userID</key>
> >
> >      <value>qwerty1234</value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>notifyrecipients</key>
> >
> >      <value>
> >
> >       <item>0702630331@sms.dof.se</item>
> >
> >      </value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>masteralias</key>
> >
> >      <value>timothy.thorpe@dof.se</value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>givenname</key>
> >
> >      <value>Timothy</value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>status</key>
> >
> >      <value>ENABLED</value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>clientMSISDN</key>
> >
> >      <value>46702630331</value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>alias</key>
> >
> >      <value>
> >
> >       <item>tim.thorpe@dof.se</item>
> >
> >       <item>t.thorpe@dof.se</item>
> >
> >      </value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>sn</key>
> >
> >      <value>Thorpe</value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>cos</key>
> >
> >      <value>2903</value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>migrate</key>
> >
> >      <value>false</value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>aliasdomain</key>
> >
> >      <value>dof.se</value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>domain</key>
> >
> >      <value>pne.dof.mobile.se</value>
> >
> >     </item>
> >
> >     <item>
> >
> >      <key>sievestatus</key>
> >
> >      <value>ENABLED</value>
> >
> >     </item>
> >
> >    </hUserDtls>
> >
> >   </addUser>
> >
> >  </soapenv:Body>
> >
> > </soapenv:Envelope>
> >
> >
> ----------------------------------------------------------------------------
> -------------------------------------------
> >
> >
> >
> > The TCP Monitor shows the following Fault being returned:
> >
> >
> ----------------------------------------------------------------------------
> -------------------------------------------
> >
> > HTTP/1.1 500 Internal Server Error
> >
> > Content-Type: text/xml;charset=utf-8
> >
> > Date: Fri, 15 Apr 2005 07:37:29 GMT
> >
> > Server: Apache-Coyote/1.1
> >
> > Connection: close
> >
> >
> >
> > <?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>
> >
> >   <soapenv:Fault>
> >
> >    <faultcode>soapenv:Server.userException</faultcode>
> >
> >    <faultstring>org.xml.sax.SAXException: SimpleDeserializer encountered a
> > child element, which is NOT expected, in something it was trying to
> > deserialize.</faultstring>
> >
> >    <detail/>
> >
> >   </soapenv:Fault>
> >
> >  </soapenv:Body>
> >
> > </soapenv:Envelope>
> >
> >
> ----------------------------------------------------------------------------
> -------------------------------------------
> >
> >
> >
> >
> >
> > Timothy Thorpe
> >
> > Consultant Software Engineer
> >
> >
> >
> >
> 
> 
>

Mime
View raw message