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 jagannath <ja...@adventnet.com> on 2004/05/04 17:42:42 UTC

Re: problems retrieving the value of ArrayList of Object Array

Hi,

For the below mentioned problem I tried using Axis 1.2 Beta and guess 
what it works perfectly fine. All my values are retrieved properly from 
the client stubs. I also found out that I don't have to write my custom 
serializers for java.util.ArrayList. It is handled by axis itself. Was 
this something that was handled in 1.2 Beta or in was it handled in 1.1 
itself.

Thanks once again.

Jagannath



Davanum Srinivas wrote:

>Plz create a bug report with your full example that we can use to recreate the problem. Make sure
>you are using at least Axis 1.2 Beta.
>
>thanks,
>dims
>--- jagannath <ja...@adventnet.com> wrote:
>  
>
>>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="#id0"/>
>>  </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="#id0"/>
>>  </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);
>>    }
>>
>>}
>>
>>
>>    
>>
>
>
>=====
>Davanum Srinivas - http://webservices.apache.org/~dims/
>
>  
>


-- 
-------------------------------------------------------
Jagannath.C
AdventNet ManageEngine JMX Studio
Off : 2243115 Extn:5252
Res: 22790045
Nortel: +91-925-895-6380
www.adventnet.com
-------------------------------------------------------