Guys,
Any update on this.
Please help as this is urgent to me.
Please let me know if any other information is required.
Regards,
Jagannath
Hello Users,
I am facing problems retrieving the value of ArrayList of Object Array
using client stubs generated using WSDL2Java. The ObjectArray has just a
string in it.
I have a method in my WebService that returns an java.util.ArrayList of
ObjectArray. For this I have written serializer for ArrayList and
defined the ArrayOfObject in my wsdl file as shown below
<complexType name="ArrayList">
<all>
<element name="item" minOccurs="0" maxOccurs="unbounded"
type="xsd:anyType"/>
</all>
</complexType>
<complexType name="ArrayOfObject">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType"
wsdl:arrayType="xsd:anyType[]"/>
</restriction>
</complexContent>
</complexType>
The ArrayList.java that is generated is attached with this mail.
What is happening is I only get the String present in the last
ObjectArray added in the ArrayList. When I have a ArrayList that
contains String I am able to fetch all the values.
For further reference please refer the tcpmon response for ArrayList of
String and ArrayList of ObjectArray below
----------ArrayList with ObjectArray---------------
<?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:invokeResponse
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://localhost:7001/jmx/soapServices/AdventNetSoapAgent">
<invokeReturn href=""/>
</ns1:invokeResponse>
<multiRef id="id0" soapenc:root="0"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="ns2:ArrayList"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns2="urn:AdventNetSoapAgentTypes">
<item xsi:type="ns2:ArrayOfObject">
<item xsi:type="xsd:string">33333333</item>
</item>
<item xsi:type="ns2:ArrayOfObject">
<item xsi:type="xsd:string">222222222</item>
</item>
<item xsi:type="ns2:ArrayOfObject">
<item xsi:type="xsd:string">334444444</item>
</item>
</multiRef>
</soapenv:Body>
</soapenv:Envelope>
----------ArrayList with ObjectArray---------------
----------ArrayList with String---------------
<?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:invokeResponse
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://localhost:7001/jmx/soapServices/AdventNetSoapAgent">
<invokeReturn href=""/>
</ns1:invokeResponse>
<multiRef id="id0" soapenc:root="0"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="ns2:ArrayList"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns2="urn:AdventNetSoapAgentTypes">
<item xsi:type="xsd:string">33333333</item>
<item xsi:type="xsd:string">222222222</item>
<item xsi:type="xsd:string">334444444</item>
</multiRef>
</soapenv:Body>
</soapenv:Envelope>
----------ArrayList with String---------------
I tried some debugging by putting print statements in the /setItem/
method of ArrayList stub.
I found that for ArrayList with three Strings the method gets called
three times with the Object[] passed having 1,2 and 3 elements it. That
is in the third call the Object[] passed has all the 3 Strings in it.
But for ArrayList with Object[] in it, though the setItem method gets
called three times the Object[] passed has only one element in it. So
only the last element gets stored in the ArrayList stub.
Hope I am clear.
I am using AXIS1.0 version.
Is this an issue with AXIS or am I missing something.
Please help as this is urgent to me.
Thanks,
--
-------------------------------------------------------
Jagannath.C
AdventNet ManageEngine JMX Studio
Off : 2243115 Extn:5252
Nortel: +91-925-895-6380
www.adventnet.com
-------------------------------------------------------
/**
* ArrayList.java
*
* This file was auto-generated from WSDL
* by the Apache Axis WSDL2Java emitter.
*/
package AdventNetSoapAgentTypes;
public class ArrayList implements java.io.Serializable {
private java.lang.Object[] item;
public ArrayList() {
}
public java.lang.Object[] getItem() {
return item;
}
public void setItem(java.lang.Object[] item) {
System.out.println("ArrayList: Inside setItem "+item.length);
this.item = item;
}
public java.lang.Object getItem(int i) {
return item[i];
}
public void setItem(int i, java.lang.Object value) {
this.item[i] = value;
}
private java.lang.Object __equalsCalc = null;
public synchronized boolean equals(java.lang.Object obj) {
if (!(obj instanceof ArrayList)) return false;
ArrayList other = (ArrayList) obj;
if (obj == null) return false;
if (this == obj) return true;
if (__equalsCalc != null) {
return (__equalsCalc == obj);
}
__equalsCalc = obj;
boolean _equals;
_equals = true &&
((item==null && other.getItem()==null) ||
(item!=null &&
java.util.Arrays.equals(item, other.getItem())));
__equalsCalc = null;
return _equals;
}
private boolean __hashCodeCalc = false;
public synchronized int hashCode() {
if (__hashCodeCalc) {
return 0;
}
__hashCodeCalc = true;
int _hashCode = 1;
if (getItem() != null) {
for (int i=0;
i<java.lang.reflect.Array.getLength(getItem());
i++) {
java.lang.Object obj = java.lang.reflect.Array.get(getItem(), i);
if (obj != null &&
!obj.getClass().isArray()) {
_hashCode += obj.hashCode();
}
}
}
__hashCodeCalc = false;
return _hashCode;
}
// Type metadata
private static org.apache.axis.description.TypeDesc typeDesc =
new org.apache.axis.description.TypeDesc(ArrayList.class);
static {
org.apache.axis.description.FieldDesc field = new
org.apache.axis.description.ElementDesc();
field.setFieldName("item");
field.setXmlName(new javax.xml.namespace.QName("", "item"));
field.setMinOccursIs0(true);
typeDesc.addFieldDesc(field);
};
/**
* Return type metadata object
*/
public static org.apache.axis.description.TypeDesc getTypeDesc() {
return typeDesc;
}
/**
* Get Custom Serializer
*/
public static org.apache.axis.encoding.Serializer getSerializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanSerializer(
_javaType, _xmlType, typeDesc);
}
/**
* Get Custom Deserializer
*/
public static org.apache.axis.encoding.Deserializer getDeserializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanDeserializer(
_javaType, _xmlType, typeDesc);
}
}