You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Christian Campo <ch...@gmail.com> on 2004/08/03 15:34:18 UTC

convert rpc/encoded to rpc/literal

Hi,

(I feel kind of stupid with this question, because I use Axis for quit
some time now, but can't figure out this problem).

I have a working sample that uses the BeanSerializer and uses
rpc/encoding. The client uses the Call object (not codegeneration
involved) and the service simply echos the received object.
The passed object simply contains two String objects with setter and
getters and a constructor with no parameters.
Everything works fine.

Now I try to convert the service to a different message style. I tried
various styles which all sort of produce the same message.

I changed the wsdd file to include the style:
<service name="ComplexService" provider="java:RPC" style="rpc" use="literal">

And I changed the client program to use Literal as format:
call.setOperationUse(Use.LITERAL);

Now the call from client to server works (it receives the object), the
object is returned (looks good) and then the client tries to
deserialize it and says:
----------------------------------------------------------------------------------------------------------------------------------
	{http://xml.apache.org/axis/}stackTrace: org.xml.sax.SAXException:
SimpleDeserializer encountered a child element, which is NOT expected,
in something it was trying to deserialize.
	at org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeserializer.java:189)
	at org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:963)
	at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
	at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:722)
	at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:233)
	at org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)
	at org.apache.axis.client.Call.invoke(Call.java:2272)
	at org.apache.axis.client.Call.invoke(Call.java:2171)
	at org.apache.axis.client.Call.invoke(Call.java:1691)
----------------------------------------------------------------------------------------------------------------------------------
I am using Axis 1.1.
The request SOAP message looks like this:
----------------------------------------------------------------------------------------------------------------------------------
<?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>
  <echoSimpleValue xmlns="">
   <arg0>
    <field1>cc</field1>
    <field2>dd</field2>
   </arg0>
  </echoSimpleValue>
 </soapenv:Body>
</soapenv:Envelope>
Here is what the server replied:
----------------------------------------------------------------------------------------------------------------------------------
<?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>
  <echoSimpleValueResponse xmlns="">
   <echoSimpleValueReturn>
    <field1>cc</field1>
    <field2>dd</field2>
   </echoSimpleValueReturn>
  </echoSimpleValueResponse>
 </soapenv:Body>
</soapenv:Envelope>
----------------------------------------------------------------------------------------------------------------------------------
The problem seems to be that the SimpleDeserializer is used instead of
the BeanDeserializer. All this is quit clear. However the Axis Engine
on the server was able to deserialize it. Why didn't it also have the
same kind of problems ?
And if it didn't have them through some magic, why does the
deserialization fail on the client ??
Any idea somebody ?
thanks
-- 
christian campo (gmail.com)

RE: convert rpc/encoded to rpc/literal

Posted by Anne Thomas Manes <an...@manes.net>.
Please send us your WSDL.

-----Original Message-----
From: Christian Campo [mailto:christian.campo@gmail.com] 
Sent: Wednesday, August 04, 2004 2:56 AM
To: axis-user@ws.apache.org
Subject: Re: convert rpc/encoded to rpc/literal

good point.
However not I am sending the xsi:types but Axis is doing that. I am
using Axis on both ends (same version).
But you are right, the request contains xsi:type info for all fields
which probably helps to find the beanDeserializer on the server for
that xsi:type and there is no xsi:type at all in the response.
I am not really convinced that it is related the the blank namespace.
I tried to set a namespace when I used Axis 1.1. and the result was
the same.
It all makes me wonder, whether my Axis client is really sending in
wrapped style. It is adding all the extra xsi:type info which it
shouldn't for wrapped style.
Also I don't understand how Axis on the server will find the right
type mapping entry in the WSDD file for each parameter if there is no
xsi:type in the argx entry.

any idea anybody ?
christian campo

On Tue, 3 Aug 2004 19:35:10 -0400, Anne Thomas Manes <an...@manes.net> wrote:
> Can you send us your WSDL?
> I suspect the problem has something to do with the fact that the child
> element of the SOAP Body has no namespace. Also with doc/literal, you
should
> not be sending xsi:type information in the message.
> 
> Anne
> 
> 
> 
> -----Original Message-----
> From: Christian Campo [mailto:christian.campo@gmail.com]
> Sent: Tuesday, August 03, 2004 11:46 AM
> To: axis-user@ws.apache.org
> Subject: Re: convert rpc/encoded to rpc/literal
> 
> Hi,
> you are saying it does not support rpc/literal. I believe you, but it
> works for some parameter types like int or string. Whatever.
> I tried Axis 1.2. beta 2.
> I runs faster (at least my subjective feeling)
> I made it use wrapped style:
> call.setOperationStyle(Style.WRAPPED);
> and
> <service name="ComplexService" provider="java:RPC" style="wrapped">
> The same error happens:
> org.xml.sax.SAXException: SimpleDeserializer encountered a child
> element, which is NOT expected, in something it was trying to
> deserialize.
>         at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
>         at org.apache.axis.client.Call.invoke(Call.java:2421)
>         at org.apache.axis.client.Call.invoke(Call.java:2317)
>         at org.apache.axis.client.Call.invoke(Call.java:1774)
> 
> request:
> <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><echoSim
> pleValue
> xmlns=""><arg0 xsi:type="ns1:SimpleValue"
> xmlns:ns1="urn:ComplexService"><field1
> xsi:type="xsd:string">cc</field1><field2
>
xsi:type="xsd:string">dd</field2></arg0></echoSimpleValue></soapenv:Body></s
> oapenv:Envelope>
> 
> response:
> <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><echoSim
> pleValueResponse
>
xmlns=""><echoSimpleValueReturn><field1>cc</field1><field2>dd</field2></echo
>
SimpleValueReturn></echoSimpleValueResponse></soapenv:Body></soapenv:Envelop
> e>
> 
> again it cannot deserialize on the client. it can deserialize the same
> value on the server (I debugged it)
> 
> any help appreciated.
> 
> christian campo
> On Tue, 3 Aug 2004 11:08:26 -0400, Anne Thomas Manes <an...@manes.net>
wrote:
> > Axis does not support rpc/literal. It supports rpc/encoded or
> > document/literal styles only. If you would like to use an rpc style
> > programming interface and generate doc/literal messages, you should use
> the
> > Axis "wrapped" style. (You should also use Axis 1.2 if you want to use
> > literal encoding.)
> >
> > Anne
> >
> >
> >
> > -----Original Message-----
> > From: Christian Campo [mailto:christian.campo@gmail.com]
> > Sent: Tuesday, August 03, 2004 9:34 AM
> > To: axis-user@ws.apache.org
> > Subject: convert rpc/encoded to rpc/literal
> >
> > Hi,
> >
> > (I feel kind of stupid with this question, because I use Axis for quit
> > some time now, but can't figure out this problem).
> >
> > I have a working sample that uses the BeanSerializer and uses
> > rpc/encoding. The client uses the Call object (not codegeneration
> > involved) and the service simply echos the received object.
> > The passed object simply contains two String objects with setter and
> > getters and a constructor with no parameters.
> > Everything works fine.
> >
> > Now I try to convert the service to a different message style. I tried
> > various styles which all sort of produce the same message.
> >
> > I changed the wsdd file to include the style:
> > <service name="ComplexService" provider="java:RPC" style="rpc"
> > use="literal">
> >
> > And I changed the client program to use Literal as format:
> > call.setOperationUse(Use.LITERAL);
> >
> > Now the call from client to server works (it receives the object), the
> > object is returned (looks good) and then the client tries to
> > deserialize it and says:
> >
>
----------------------------------------------------------------------------
> > ------------------------------------------------------
> >         {http://xml.apache.org/axis/}stackTrace:
org.xml.sax.SAXException:
> > SimpleDeserializer encountered a child element, which is NOT expected,
> > in something it was trying to deserialize.
> >         at
> >
>
org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeseriali
> > zer.java:189)
> >         at
> >
>
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deserializa
> > tionContextImpl.java:963)
> >         at
> >
>
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
> >         at
> >
>
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:
> > 722)
> >         at
> > org.apache.axis.message.RPCElement.deserialize(RPCElement.java:233)
> >         at
> org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)
> >         at org.apache.axis.client.Call.invoke(Call.java:2272)
> >         at org.apache.axis.client.Call.invoke(Call.java:2171)
> >         at org.apache.axis.client.Call.invoke(Call.java:1691)
> >
>
----------------------------------------------------------------------------
> > ------------------------------------------------------
> > I am using Axis 1.1.
> > The request SOAP message looks like this:
> >
>
----------------------------------------------------------------------------
> > ------------------------------------------------------
> > <?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>
> >   <echoSimpleValue xmlns="">
> >    <arg0>
> >     <field1>cc</field1>
> >     <field2>dd</field2>
> >    </arg0>
> >   </echoSimpleValue>
> >  </soapenv:Body>
> > </soapenv:Envelope>
> > Here is what the server replied:
> >
>
----------------------------------------------------------------------------
> > ------------------------------------------------------
> > <?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>
> >   <echoSimpleValueResponse xmlns="">
> >    <echoSimpleValueReturn>
> >     <field1>cc</field1>
> >     <field2>dd</field2>
> >    </echoSimpleValueReturn>
> >   </echoSimpleValueResponse>
> >  </soapenv:Body>
> > </soapenv:Envelope>
> >
>
----------------------------------------------------------------------------
> > ------------------------------------------------------
> > The problem seems to be that the SimpleDeserializer is used instead of
> > the BeanDeserializer. All this is quit clear. However the Axis Engine
> > on the server was able to deserialize it. Why didn't it also have the
> > same kind of problems ?
> > And if it didn't have them through some magic, why does the
> > deserialization fail on the client ??
> > Any idea somebody ?
> > thanks
> > --
> > christian campo (gmail.com)
> >
> >
> 
> --
> christian campo (gmail.com)
> 
> 


-- 
christian campo (gmail.com)


Re: convert rpc/encoded to rpc/literal

Posted by Christian Campo <ch...@gmail.com>.
good point.
However not I am sending the xsi:types but Axis is doing that. I am
using Axis on both ends (same version).
But you are right, the request contains xsi:type info for all fields
which probably helps to find the beanDeserializer on the server for
that xsi:type and there is no xsi:type at all in the response.
I am not really convinced that it is related the the blank namespace.
I tried to set a namespace when I used Axis 1.1. and the result was
the same.
It all makes me wonder, whether my Axis client is really sending in
wrapped style. It is adding all the extra xsi:type info which it
shouldn't for wrapped style.
Also I don't understand how Axis on the server will find the right
type mapping entry in the WSDD file for each parameter if there is no
xsi:type in the argx entry.

any idea anybody ?
christian campo

On Tue, 3 Aug 2004 19:35:10 -0400, Anne Thomas Manes <an...@manes.net> wrote:
> Can you send us your WSDL?
> I suspect the problem has something to do with the fact that the child
> element of the SOAP Body has no namespace. Also with doc/literal, you should
> not be sending xsi:type information in the message.
> 
> Anne
> 
> 
> 
> -----Original Message-----
> From: Christian Campo [mailto:christian.campo@gmail.com]
> Sent: Tuesday, August 03, 2004 11:46 AM
> To: axis-user@ws.apache.org
> Subject: Re: convert rpc/encoded to rpc/literal
> 
> Hi,
> you are saying it does not support rpc/literal. I believe you, but it
> works for some parameter types like int or string. Whatever.
> I tried Axis 1.2. beta 2.
> I runs faster (at least my subjective feeling)
> I made it use wrapped style:
> call.setOperationStyle(Style.WRAPPED);
> and
> <service name="ComplexService" provider="java:RPC" style="wrapped">
> The same error happens:
> org.xml.sax.SAXException: SimpleDeserializer encountered a child
> element, which is NOT expected, in something it was trying to
> deserialize.
>         at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
>         at org.apache.axis.client.Call.invoke(Call.java:2421)
>         at org.apache.axis.client.Call.invoke(Call.java:2317)
>         at org.apache.axis.client.Call.invoke(Call.java:1774)
> 
> request:
> <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><echoSim
> pleValue
> xmlns=""><arg0 xsi:type="ns1:SimpleValue"
> xmlns:ns1="urn:ComplexService"><field1
> xsi:type="xsd:string">cc</field1><field2
> xsi:type="xsd:string">dd</field2></arg0></echoSimpleValue></soapenv:Body></s
> oapenv:Envelope>
> 
> response:
> <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><echoSim
> pleValueResponse
> xmlns=""><echoSimpleValueReturn><field1>cc</field1><field2>dd</field2></echo
> SimpleValueReturn></echoSimpleValueResponse></soapenv:Body></soapenv:Envelop
> e>
> 
> again it cannot deserialize on the client. it can deserialize the same
> value on the server (I debugged it)
> 
> any help appreciated.
> 
> christian campo
> On Tue, 3 Aug 2004 11:08:26 -0400, Anne Thomas Manes <an...@manes.net> wrote:
> > Axis does not support rpc/literal. It supports rpc/encoded or
> > document/literal styles only. If you would like to use an rpc style
> > programming interface and generate doc/literal messages, you should use
> the
> > Axis "wrapped" style. (You should also use Axis 1.2 if you want to use
> > literal encoding.)
> >
> > Anne
> >
> >
> >
> > -----Original Message-----
> > From: Christian Campo [mailto:christian.campo@gmail.com]
> > Sent: Tuesday, August 03, 2004 9:34 AM
> > To: axis-user@ws.apache.org
> > Subject: convert rpc/encoded to rpc/literal
> >
> > Hi,
> >
> > (I feel kind of stupid with this question, because I use Axis for quit
> > some time now, but can't figure out this problem).
> >
> > I have a working sample that uses the BeanSerializer and uses
> > rpc/encoding. The client uses the Call object (not codegeneration
> > involved) and the service simply echos the received object.
> > The passed object simply contains two String objects with setter and
> > getters and a constructor with no parameters.
> > Everything works fine.
> >
> > Now I try to convert the service to a different message style. I tried
> > various styles which all sort of produce the same message.
> >
> > I changed the wsdd file to include the style:
> > <service name="ComplexService" provider="java:RPC" style="rpc"
> > use="literal">
> >
> > And I changed the client program to use Literal as format:
> > call.setOperationUse(Use.LITERAL);
> >
> > Now the call from client to server works (it receives the object), the
> > object is returned (looks good) and then the client tries to
> > deserialize it and says:
> >
> ----------------------------------------------------------------------------
> > ------------------------------------------------------
> >         {http://xml.apache.org/axis/}stackTrace: org.xml.sax.SAXException:
> > SimpleDeserializer encountered a child element, which is NOT expected,
> > in something it was trying to deserialize.
> >         at
> >
> org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeseriali
> > zer.java:189)
> >         at
> >
> org.apache.axis.encoding.DeserializationContextImpl.startElement(Deserializa
> > tionContextImpl.java:963)
> >         at
> >
> org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
> >         at
> >
> org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:
> > 722)
> >         at
> > org.apache.axis.message.RPCElement.deserialize(RPCElement.java:233)
> >         at
> org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)
> >         at org.apache.axis.client.Call.invoke(Call.java:2272)
> >         at org.apache.axis.client.Call.invoke(Call.java:2171)
> >         at org.apache.axis.client.Call.invoke(Call.java:1691)
> >
> ----------------------------------------------------------------------------
> > ------------------------------------------------------
> > I am using Axis 1.1.
> > The request SOAP message looks like this:
> >
> ----------------------------------------------------------------------------
> > ------------------------------------------------------
> > <?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>
> >   <echoSimpleValue xmlns="">
> >    <arg0>
> >     <field1>cc</field1>
> >     <field2>dd</field2>
> >    </arg0>
> >   </echoSimpleValue>
> >  </soapenv:Body>
> > </soapenv:Envelope>
> > Here is what the server replied:
> >
> ----------------------------------------------------------------------------
> > ------------------------------------------------------
> > <?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>
> >   <echoSimpleValueResponse xmlns="">
> >    <echoSimpleValueReturn>
> >     <field1>cc</field1>
> >     <field2>dd</field2>
> >    </echoSimpleValueReturn>
> >   </echoSimpleValueResponse>
> >  </soapenv:Body>
> > </soapenv:Envelope>
> >
> ----------------------------------------------------------------------------
> > ------------------------------------------------------
> > The problem seems to be that the SimpleDeserializer is used instead of
> > the BeanDeserializer. All this is quit clear. However the Axis Engine
> > on the server was able to deserialize it. Why didn't it also have the
> > same kind of problems ?
> > And if it didn't have them through some magic, why does the
> > deserialization fail on the client ??
> > Any idea somebody ?
> > thanks
> > --
> > christian campo (gmail.com)
> >
> >
> 
> --
> christian campo (gmail.com)
> 
> 


-- 
christian campo (gmail.com)

RE: convert rpc/encoded to rpc/literal

Posted by Anne Thomas Manes <an...@manes.net>.
Can you send us your WSDL?
I suspect the problem has something to do with the fact that the child
element of the SOAP Body has no namespace. Also with doc/literal, you should
not be sending xsi:type information in the message.

Anne

-----Original Message-----
From: Christian Campo [mailto:christian.campo@gmail.com] 
Sent: Tuesday, August 03, 2004 11:46 AM
To: axis-user@ws.apache.org
Subject: Re: convert rpc/encoded to rpc/literal

Hi,
you are saying it does not support rpc/literal. I believe you, but it
works for some parameter types like int or string. Whatever.
I tried Axis 1.2. beta 2.
I runs faster (at least my subjective feeling)
I made it use wrapped style:
call.setOperationStyle(Style.WRAPPED);
and
<service name="ComplexService" provider="java:RPC" style="wrapped">
The same error happens:
org.xml.sax.SAXException: SimpleDeserializer encountered a child
element, which is NOT expected, in something it was trying to
deserialize.
	at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
	at org.apache.axis.client.Call.invoke(Call.java:2421)
	at org.apache.axis.client.Call.invoke(Call.java:2317)
	at org.apache.axis.client.Call.invoke(Call.java:1774)

request:
<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><echoSim
pleValue
xmlns=""><arg0 xsi:type="ns1:SimpleValue"
xmlns:ns1="urn:ComplexService"><field1
xsi:type="xsd:string">cc</field1><field2
xsi:type="xsd:string">dd</field2></arg0></echoSimpleValue></soapenv:Body></s
oapenv:Envelope>

response:
<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><echoSim
pleValueResponse
xmlns=""><echoSimpleValueReturn><field1>cc</field1><field2>dd</field2></echo
SimpleValueReturn></echoSimpleValueResponse></soapenv:Body></soapenv:Envelop
e>

again it cannot deserialize on the client. it can deserialize the same
value on the server (I debugged it)

any help appreciated.

christian campo
On Tue, 3 Aug 2004 11:08:26 -0400, Anne Thomas Manes <an...@manes.net> wrote:
> Axis does not support rpc/literal. It supports rpc/encoded or
> document/literal styles only. If you would like to use an rpc style
> programming interface and generate doc/literal messages, you should use
the
> Axis "wrapped" style. (You should also use Axis 1.2 if you want to use
> literal encoding.)
> 
> Anne
> 
> 
> 
> -----Original Message-----
> From: Christian Campo [mailto:christian.campo@gmail.com]
> Sent: Tuesday, August 03, 2004 9:34 AM
> To: axis-user@ws.apache.org
> Subject: convert rpc/encoded to rpc/literal
> 
> Hi,
> 
> (I feel kind of stupid with this question, because I use Axis for quit
> some time now, but can't figure out this problem).
> 
> I have a working sample that uses the BeanSerializer and uses
> rpc/encoding. The client uses the Call object (not codegeneration
> involved) and the service simply echos the received object.
> The passed object simply contains two String objects with setter and
> getters and a constructor with no parameters.
> Everything works fine.
> 
> Now I try to convert the service to a different message style. I tried
> various styles which all sort of produce the same message.
> 
> I changed the wsdd file to include the style:
> <service name="ComplexService" provider="java:RPC" style="rpc"
> use="literal">
> 
> And I changed the client program to use Literal as format:
> call.setOperationUse(Use.LITERAL);
> 
> Now the call from client to server works (it receives the object), the
> object is returned (looks good) and then the client tries to
> deserialize it and says:
>
----------------------------------------------------------------------------
> ------------------------------------------------------
>         {http://xml.apache.org/axis/}stackTrace: org.xml.sax.SAXException:
> SimpleDeserializer encountered a child element, which is NOT expected,
> in something it was trying to deserialize.
>         at
>
org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeseriali
> zer.java:189)
>         at
>
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deserializa
> tionContextImpl.java:963)
>         at
>
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
>         at
>
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:
> 722)
>         at
> org.apache.axis.message.RPCElement.deserialize(RPCElement.java:233)
>         at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)
>         at org.apache.axis.client.Call.invoke(Call.java:2272)
>         at org.apache.axis.client.Call.invoke(Call.java:2171)
>         at org.apache.axis.client.Call.invoke(Call.java:1691)
>
----------------------------------------------------------------------------
> ------------------------------------------------------
> I am using Axis 1.1.
> The request SOAP message looks like this:
>
----------------------------------------------------------------------------
> ------------------------------------------------------
> <?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>
>   <echoSimpleValue xmlns="">
>    <arg0>
>     <field1>cc</field1>
>     <field2>dd</field2>
>    </arg0>
>   </echoSimpleValue>
>  </soapenv:Body>
> </soapenv:Envelope>
> Here is what the server replied:
>
----------------------------------------------------------------------------
> ------------------------------------------------------
> <?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>
>   <echoSimpleValueResponse xmlns="">
>    <echoSimpleValueReturn>
>     <field1>cc</field1>
>     <field2>dd</field2>
>    </echoSimpleValueReturn>
>   </echoSimpleValueResponse>
>  </soapenv:Body>
> </soapenv:Envelope>
>
----------------------------------------------------------------------------
> ------------------------------------------------------
> The problem seems to be that the SimpleDeserializer is used instead of
> the BeanDeserializer. All this is quit clear. However the Axis Engine
> on the server was able to deserialize it. Why didn't it also have the
> same kind of problems ?
> And if it didn't have them through some magic, why does the
> deserialization fail on the client ??
> Any idea somebody ?
> thanks
> --
> christian campo (gmail.com)
> 
> 


-- 
christian campo (gmail.com)


Re: convert rpc/encoded to rpc/literal

Posted by Christian Campo <ch...@gmail.com>.
Hi,
you are saying it does not support rpc/literal. I believe you, but it
works for some parameter types like int or string. Whatever.
I tried Axis 1.2. beta 2.
I runs faster (at least my subjective feeling)
I made it use wrapped style:
call.setOperationStyle(Style.WRAPPED);
and
<service name="ComplexService" provider="java:RPC" style="wrapped">
The same error happens:
org.xml.sax.SAXException: SimpleDeserializer encountered a child
element, which is NOT expected, in something it was trying to
deserialize.
	at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
	at org.apache.axis.client.Call.invoke(Call.java:2421)
	at org.apache.axis.client.Call.invoke(Call.java:2317)
	at org.apache.axis.client.Call.invoke(Call.java:1774)

request:
<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><echoSimpleValue
xmlns=""><arg0 xsi:type="ns1:SimpleValue"
xmlns:ns1="urn:ComplexService"><field1
xsi:type="xsd:string">cc</field1><field2
xsi:type="xsd:string">dd</field2></arg0></echoSimpleValue></soapenv:Body></soapenv:Envelope>

response:
<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><echoSimpleValueResponse
xmlns=""><echoSimpleValueReturn><field1>cc</field1><field2>dd</field2></echoSimpleValueReturn></echoSimpleValueResponse></soapenv:Body></soapenv:Envelope>

again it cannot deserialize on the client. it can deserialize the same
value on the server (I debugged it)

any help appreciated.

christian campo
On Tue, 3 Aug 2004 11:08:26 -0400, Anne Thomas Manes <an...@manes.net> wrote:
> Axis does not support rpc/literal. It supports rpc/encoded or
> document/literal styles only. If you would like to use an rpc style
> programming interface and generate doc/literal messages, you should use the
> Axis "wrapped" style. (You should also use Axis 1.2 if you want to use
> literal encoding.)
> 
> Anne
> 
> 
> 
> -----Original Message-----
> From: Christian Campo [mailto:christian.campo@gmail.com]
> Sent: Tuesday, August 03, 2004 9:34 AM
> To: axis-user@ws.apache.org
> Subject: convert rpc/encoded to rpc/literal
> 
> Hi,
> 
> (I feel kind of stupid with this question, because I use Axis for quit
> some time now, but can't figure out this problem).
> 
> I have a working sample that uses the BeanSerializer and uses
> rpc/encoding. The client uses the Call object (not codegeneration
> involved) and the service simply echos the received object.
> The passed object simply contains two String objects with setter and
> getters and a constructor with no parameters.
> Everything works fine.
> 
> Now I try to convert the service to a different message style. I tried
> various styles which all sort of produce the same message.
> 
> I changed the wsdd file to include the style:
> <service name="ComplexService" provider="java:RPC" style="rpc"
> use="literal">
> 
> And I changed the client program to use Literal as format:
> call.setOperationUse(Use.LITERAL);
> 
> Now the call from client to server works (it receives the object), the
> object is returned (looks good) and then the client tries to
> deserialize it and says:
> ----------------------------------------------------------------------------
> ------------------------------------------------------
>         {http://xml.apache.org/axis/}stackTrace: org.xml.sax.SAXException:
> SimpleDeserializer encountered a child element, which is NOT expected,
> in something it was trying to deserialize.
>         at
> org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeseriali
> zer.java:189)
>         at
> org.apache.axis.encoding.DeserializationContextImpl.startElement(Deserializa
> tionContextImpl.java:963)
>         at
> org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
>         at
> org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:
> 722)
>         at
> org.apache.axis.message.RPCElement.deserialize(RPCElement.java:233)
>         at org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)
>         at org.apache.axis.client.Call.invoke(Call.java:2272)
>         at org.apache.axis.client.Call.invoke(Call.java:2171)
>         at org.apache.axis.client.Call.invoke(Call.java:1691)
> ----------------------------------------------------------------------------
> ------------------------------------------------------
> I am using Axis 1.1.
> The request SOAP message looks like this:
> ----------------------------------------------------------------------------
> ------------------------------------------------------
> <?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>
>   <echoSimpleValue xmlns="">
>    <arg0>
>     <field1>cc</field1>
>     <field2>dd</field2>
>    </arg0>
>   </echoSimpleValue>
>  </soapenv:Body>
> </soapenv:Envelope>
> Here is what the server replied:
> ----------------------------------------------------------------------------
> ------------------------------------------------------
> <?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>
>   <echoSimpleValueResponse xmlns="">
>    <echoSimpleValueReturn>
>     <field1>cc</field1>
>     <field2>dd</field2>
>    </echoSimpleValueReturn>
>   </echoSimpleValueResponse>
>  </soapenv:Body>
> </soapenv:Envelope>
> ----------------------------------------------------------------------------
> ------------------------------------------------------
> The problem seems to be that the SimpleDeserializer is used instead of
> the BeanDeserializer. All this is quit clear. However the Axis Engine
> on the server was able to deserialize it. Why didn't it also have the
> same kind of problems ?
> And if it didn't have them through some magic, why does the
> deserialization fail on the client ??
> Any idea somebody ?
> thanks
> --
> christian campo (gmail.com)
> 
> 


-- 
christian campo (gmail.com)

RE: convert rpc/encoded to rpc/literal

Posted by Anne Thomas Manes <an...@manes.net>.
Axis does not support rpc/literal. It supports rpc/encoded or
document/literal styles only. If you would like to use an rpc style
programming interface and generate doc/literal messages, you should use the
Axis "wrapped" style. (You should also use Axis 1.2 if you want to use
literal encoding.)

Anne

-----Original Message-----
From: Christian Campo [mailto:christian.campo@gmail.com] 
Sent: Tuesday, August 03, 2004 9:34 AM
To: axis-user@ws.apache.org
Subject: convert rpc/encoded to rpc/literal

Hi,

(I feel kind of stupid with this question, because I use Axis for quit
some time now, but can't figure out this problem).

I have a working sample that uses the BeanSerializer and uses
rpc/encoding. The client uses the Call object (not codegeneration
involved) and the service simply echos the received object.
The passed object simply contains two String objects with setter and
getters and a constructor with no parameters.
Everything works fine.

Now I try to convert the service to a different message style. I tried
various styles which all sort of produce the same message.

I changed the wsdd file to include the style:
<service name="ComplexService" provider="java:RPC" style="rpc"
use="literal">

And I changed the client program to use Literal as format:
call.setOperationUse(Use.LITERAL);

Now the call from client to server works (it receives the object), the
object is returned (looks good) and then the client tries to
deserialize it and says:
----------------------------------------------------------------------------
------------------------------------------------------
	{http://xml.apache.org/axis/}stackTrace: org.xml.sax.SAXException:
SimpleDeserializer encountered a child element, which is NOT expected,
in something it was trying to deserialize.
	at
org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeseriali
zer.java:189)
	at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deserializa
tionContextImpl.java:963)
	at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
	at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:
722)
	at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:233)
	at org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)
	at org.apache.axis.client.Call.invoke(Call.java:2272)
	at org.apache.axis.client.Call.invoke(Call.java:2171)
	at org.apache.axis.client.Call.invoke(Call.java:1691)
----------------------------------------------------------------------------
------------------------------------------------------
I am using Axis 1.1.
The request SOAP message looks like this:
----------------------------------------------------------------------------
------------------------------------------------------
<?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>
  <echoSimpleValue xmlns="">
   <arg0>
    <field1>cc</field1>
    <field2>dd</field2>
   </arg0>
  </echoSimpleValue>
 </soapenv:Body>
</soapenv:Envelope>
Here is what the server replied:
----------------------------------------------------------------------------
------------------------------------------------------
<?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>
  <echoSimpleValueResponse xmlns="">
   <echoSimpleValueReturn>
    <field1>cc</field1>
    <field2>dd</field2>
   </echoSimpleValueReturn>
  </echoSimpleValueResponse>
 </soapenv:Body>
</soapenv:Envelope>
----------------------------------------------------------------------------
------------------------------------------------------
The problem seems to be that the SimpleDeserializer is used instead of
the BeanDeserializer. All this is quit clear. However the Axis Engine
on the server was able to deserialize it. Why didn't it also have the
same kind of problems ?
And if it didn't have them through some magic, why does the
deserialization fail on the client ??
Any idea somebody ?
thanks
-- 
christian campo (gmail.com)