Hi Anne. It is Brit that is having the problem. :-) I was just trying to help (and learn).
Anne Thomas Manes wrote:
Stuart,
Since you haven't defined global elements in your schema, I suspect there's an error in your WSDL:
When using document style, your <part> definitions must use an element= attribute rather than a type= attribute, and you must reference an <element> definition rather than a <ComplexType> definition. So you need to define two additional elements in your schema:
<element name=User type=tns2:User /> <element name=UserGroup type=tns2:UserGroup />
and you need to modify your message part definitions to reference these elements:
<part name=body element=tns2:User />
<part name=body element=tns2:UserGroup />
And this local element definition in the "User" type would cause trouble: <element name="marks" nillable="true" type="impl:ArrayOf_xsd_float"/>
You haven't provided us with the schema for the impl namespace, but I suspect that this is a SOAP Encoding type. You should define the "marks" element this way: <element name="marks" type="xsd:float" minOccurs="0" maxOccurs="unbounded" />
Also, you should replace nillable="true" with minOccurs="0" in all your definitions.
Regards, Anne
----- Original Message ----- From: "Stuart Barlow" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Thursday, August 07, 2003 8:52 AM Subject: Re: Deserialization problems with document/literal Web service
Could this be related to AXIS generating an invalid WSDL for DOCUMENT/LITERAL services?
It is correct that DOCUMENT/LITERAL does not send type info over the wire with each call because the client should already have the type information from the WSDL.
Brit Ziemendorf wrote:
Hi all,
I implemented a small document /literal Web service sending and receiving complex objects. The XML Schema looks like listed below. As can be seen a "UserGroup" consists of some String elements and a Hashtable that itself contains "User" objects.
The Problem: When the client sends a UserGroup object the contained Hashtable can not be deserialized properly. When I debug it, it looks as if Axis can not find the correct Deserializer and uses a SimpleDeserializer as default. The SimpleDeserializer throws an exception because simple values are not supposed to have child elements.
However, when the server sends a UserGroup object back to the client, the result is nearly the same. It seems that the client expects a Hashtable and therefore uses the MapDeserializer, but the included ItemDeserializer is not able to find the correct Deserializer for the items value, a "User" object. Again a SimpleDeserializer is used as default and throws an exception.
When debugging it seems that in both cases the SimpleDeserializer is choosen because there are no type information available. How can this be? Is it normal for a document/literal service that no type information is sent over the wire? When I implement the same service as RPC/encoded it works fine. Is there anything that I can do, so that Axis gets the correct Deserializer? (Both objects are already registered in the TypeMapping!)
HELP!!
____________________________________________________________________________ _________
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://bookstore.universal"> <complexType name="User"> <sequence> <element name="age" type="xsd:int"/> <element name="name" nillable="true" type="xsd:string"/> <element name="profession" nillable="true" type="xsd:string"/> <element name="userID" nillable="true" type="xsd:string"/> <element name="marks" nillable="true" type="impl:ArrayOf_xsd_float"/> </sequence> </complexType> <complexType name="UserGroup"> <sequence> <element name="groupID" type="xsd:string"/> <element name="groupName" nillable="true" type="xsd:string"/> <element name="groupUsers" nillable="true" type="apachesoap:Map"/> </sequence> </complexType> </schema> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xml.apache.org/xml-soap"> <complexType name="mapItem"> <sequence> <element name="key" nillable="true" type="xsd:string"/> <element name="value" nillable="true" type="tns2:User"/> </sequence> </complexType> <complexType name="Map"> <sequence> <element name="item" minOccurs="0" maxOccurs="unbounded" type="apachesoap:mapItem"/> </sequence> </complexType> </schema>
____________________________________________________________________________ _______________
Thanks, Brit
