|
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 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);
}
}
