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 <[EMAIL PROTECTED]> 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=""/>
  </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);
    }

}


    


=====
Davanum Srinivas - http://webservices.apache.org/~dims/

  


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

Reply via email to