This week's book giveaway is in the Servlets forum.
We're giving away four copies of Murach's Java Servlets and JSP and have Joel Murach on-line!
See this thread for details.
The moose likes Web Services and the fly likes Array of Complex Type- item tag missing Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Java » Web Services
Bookmark "Array of Complex Type- item tag missing" Watch "Array of Complex Type- item tag missing" New topic
Author

Array of Complex Type- item tag missing

Karthik Rajendiran
Ranch Hand

Joined: Aug 13, 2004
Posts: 211
Hello Friends,
I am using axis 1.2 [Not sure of exact number version], consuming a web service.

Input to the web service has an array of Complex Type.
Array PartName of Arrayof object is "fields" mapping to

hence each item in the array is of type KeyValuePair

When we send soap request, I get the ArrayoFcomplextype partname "fields" in the item part name also

For Example instead of this

We get


Thus giving error in server side, Invalid Element.

Can you help me in this issue.


SCJP 1.4 SCWCD 1.4 SCDJWS 1.4
Karthik Rajendiran
Ranch Hand

Joined: Aug 13, 2004
Posts: 211
Detailed issue


While Accessing a webservice using axis 1.2, we are sending the input as arrayofComplex Data Type.

ComplexData Type - a Class KeyValuePair.
public class KeyValuePair implements java.io.Serializable {
private java.lang.String key;
private java.lang.String value;
public KeyValuePair() { }

public KeyValuePair(java.lang.String key, java.lang.String value) {
this.key = key;
this.value = value;
}
}

Input to the webservice is array of the above mentioned data Type.

We are expecting the following request.

<?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><ns1 rocessEvent soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://www.epiphany.com/RP">
<package xsi:type="xsd:string">THREE</package>
<event xsi:type="xsd:string">OfferRequest</event>
<fields soapenc:arrayType="ns1:ArrayOfKeyValuePair[10]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<item href="#id0"/>
<item href="#id1"/>
</fields>
</ns1 rocessEvent>

<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns7:KeyValuePair" xmlns:ns7="http://www.epiphany.com/RP" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<key xsi:type="xsd:string">
SessionId
</key>
<value xsi:type="xsd:string">
1234567890
</value>
</multiRef>

<multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:KeyValuePair" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://www.epiphany.com/RP">
<key xsi:type="xsd:string">
Customer_ID
</key>
<value xsi:type="xsd:string">
</value>
</multiRef>
</soapenv:Body>
</soapenv:Envelope>

Instead we are getting the following

<?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><ns1 rocessEvent soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://www.epiphany.com/RP">
<package xsi:type="xsd:string">THREE</package>
<event xsi:type="xsd:string">OfferRequest</event>
<fields soapenc:arrayType="ns1:ArrayOfKeyValuePair[10]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<fields href="#id0"/>
<fields href="#id1"/>
</fields>
</ns1 rocessEvent>

<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns7:KeyValuePair" xmlns:ns7="http://www.epiphany.com/RP" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<key xsi:type="xsd:string">
SessionId
</key>
<value xsi:type="xsd:string">
1234567890
</value>
</multiRef>

<multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:KeyValuePair" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://www.epiphany.com/RP">
<key xsi:type="xsd:string">
Customer_ID
</key>
<value xsi:type="xsd:string">
</value>
</multiRef>
</soapenv:Body>
</soapenv:Envelope>


Note the ArrayOfKeyValuePair should have tag named <item> as per soap standards, but we get the parent array tag name in its
element name too. i.e fields tag is replaced for <item tag

HOw to solve this issue and get expected response.

Fyi
We have given the Serializer and Deserializer as below
QName arrayOfKeyValuePairQname = new javax.xml.namespace.QName("http://www.epiphany.com/RP", "ArrayOfKeyValuePair");
QName arrayOfReturnedOffersQname = new javax.xml.namespace.QName("http://www.epiphany.com/RP", "ArrayOfReturnedOffer");
QName keyValuePairQName = new javax.xml.namespace.QName("http://www.epiphany.com/RP", "KeyValuePair");
QName returnedOfferQName = new javax.xml.namespace.QName("http://www.epiphany.com/RP", "ReturnedOffer");


TypeMappingRegistry typeMappingRegistry = service.getTypeMappingRegistry();
TypeMapping map = typeMappingRegistry.getDefaultTypeMapping();

map.register(KeyValuePair[].class, arrayOfKeyValuePairQname,
new ArraySerializerFactory(KeyValuePair[].class, arrayOfKeyValuePairQname),
new ArrayDeserializerFactory());

map.register(KeyValuePair.class, keyValuePairQName,
new BeanSerializerFactory(KeyValuePair.class,
keyValuePairQName), new BeanDeserializerFactory(
KeyValuePair.class, keyValuePairQName));

map.register(ReturnedOffer.class, returnedOfferQName,
new BeanSerializerFactory(ReturnedOffer.class,
returnedOfferQName), new BeanDeserializerFactory (
ReturnedOffer.class, returnedOfferQName));

Still we are not able to get the expected result. Kindly help us ASAP.


WSDL Entry is as follows.
<xsd:complexType name="KeyValuePair">
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="value" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ArrayOfKeyValuePair">
<xsd:complexContent>
<xsd:restriction base="SOAP-ENC:Array">
<xsd:sequence>
<xsd:element name="item" type="rp:KeyValuePair" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="rp:KeyValuePair[]"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<message name="ProcessEventRequest">
<part name="package" type="xsd:string"/>
<part name="event" type="xsd:string"/>
<part name="fields" type="rp:ArrayOfKeyValuePair"/>
</message>
Karthik Rajendiran
Ranch Hand

Joined: Aug 13, 2004
Posts: 211
Just for Reference.

Same issue is raised as bug in axis jira users community.

https://issues.apache.org/jira/browse/AXIS-2250

https://issues.apache.org/jira/browse/AXIS-2095
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Array of Complex Type- item tag missing
 
Similar Threads
Possibility for (Custom type objects) & (object arrays) in Form Bean
Struts 2 - Problem updating textfields created by iterating over a list of objects
Returning an Array of user -defined objects from a JAX-WS Webservice
passing a matrix
using an array of complex data types