Hello.  I'm having a problem with the bean-like class that is generated
from my wsdl file.  First, I would like to offer some comparisons.  I
created the following class:

public class MyResponse
    private int[] data;
    private java.util.Calendar date;
    private int requestID;

    public MyResponse() {
    }

    public int[] getData() {
        return data;
    }

    public void setData(int[] data) {
        this.data = data;
    }

    public java.util.Calendar getDate() {
        return date;
    }

    public void setDate(java.util.Calendar date) {
        this.date = date;
    }

    public int getRequestID() {
        return requestID;
    }

    public void setRequestID(int requestID) {
        this.requestID = requestID;
    }
}

Inside of my deploy.wsdd, I have the following:
     <isd:beanMapping qname="myNS:MyResponse" xmlns:myNS="urn:MyService"
languageSpecificType="java:com.test.MyResponse"/>

The following is what the WSDL looks like (when viewing through the web
browser):
   <element name="requestResponse">
    <complexType>
     <sequence>
      <element name="requestReturn" type="impl:MyResponse"/>
     </sequence>
    </complexType>
   </element>
   <complexType name="ArrayOf_xsd_int">
    <complexContent>
     <restriction base="soapenc:Array">
      <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:int[]"/>
     </restriction>
    </complexContent>
   </complexType>
   <complexType name="MyResponse">
    <sequence>
     <element name="data" type="impl:ArrayOf_xsd_int"/>
     <element name="date" type="xsd:dateTime"/>
     <element name="requestID" type="xsd:int"/>
    </sequence>
   </complexType>


When I run my client, I don't have any problems at all receiving the
int[].  Now, if I let Java2WSDL generate the WSDL, the same wsdl as
above is generated, but the following is generated for the bean class
MyResponse:

public class MyResponse  implements java.io.Serializable {
    private int[] data;
    private java.util.Calendar date;
    private int requestID;

    public MyResponse() {
    }

    public int[] getData() {
        return data;
    }

    public void setData(int[] data) {
        this.data = data;
    }

    public java.util.Calendar getDate() {
        return date;
    }

    public void setDate(java.util.Calendar date) {
        this.date = date;
    }

    public int getRequestID() {
        return requestID;
    }

    public void setRequestID(int requestID) {
        this.requestID = requestID;
    }

    ....

        static {
        typeDesc.setXmlType(new
javax.xml.namespace.QName("urn:myService.test.com", "MyResponse"));
        org.apache.axis.description.ElementDesc elemField = new
org.apache.axis.description.ElementDesc();
        elemField.setFieldName("data");
        elemField.setXmlName(new javax.xml.namespace.QName("", "data"));
        elemField.setXmlType(new
javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema";, "int"));
        typeDesc.addFieldDesc(elemField);
        elemField = new org.apache.axis.description.ElementDesc();
        elemField.setFieldName("date");
        elemField.setXmlName(new javax.xml.namespace.QName("", "date"));
        elemField.setXmlType(new
javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema";,
"dateTime"));
        typeDesc.addFieldDesc(elemField);
        elemField = new org.apache.axis.description.ElementDesc();
        elemField.setFieldName("requestID");
        elemField.setXmlName(new javax.xml.namespace.QName("",
"requestID"));
        elemField.setXmlType(new
javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema";, "int"));
        typeDesc.addFieldDesc(elemField);
    }  

The deploy that is generated does not have the bean mapping but has a
type mapping:
      <typeMapping
        xmlns:ns="urn:myService.test.com"
        qname="ns:MyResponse"
        type="java:com.test.MyResponse"
        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
 
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
        encodingStyle=""
      />
      <typeMapping
        xmlns:ns="urn:myService.test.com"
        qname="ns:ArrayOf_xsd_int"
        type="java:int[]"
        serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
 
deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
        encodingStyle=""
      />


When I run the client code, I get the following exception:
- Could not convert java.lang.Integer to bean field 'data', type [I
- Exception:
java.lang.IllegalArgumentException: argument type mismatch
        at
org.apache.axis.encoding.ser.BeanPropertyTarget.set(BeanPropertyTarget.j
ava:181)
        at
org.apache.axis.encoding.DeserializerImpl.valueComplete(DeserializerImpl
.java:282)
        at
org.apache.axis.encoding.DeserializerImpl.endElement(DeserializerImpl.ja
va:541)
        at
org.apache.axis.encoding.DeserializationContextImpl.endElement(Deseriali
zationContextImpl.java:1015)
        at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
204)
        at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:722)
        at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:233)
        at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)
        at org.apache.axis.client.Call.invoke(Call.java:2272)
        at org.apache.axis.client.Call.invoke(Call.java:2171)
        at org.apache.axis.client.Call.invoke(Call.java:1691)

How do I properly return a bean object that contains a primitive array?
Why does WSDL2Java generate the bean implementing Serializable?  I
didn't do this originally and everything worked?  In the static
initializer that is generated in the bean class, the XML type for the
data field is specified as "int", not "int[]" or something like that.
If this has been answered previously, I apologize in advance.  Also, I
have renamed some stuff to remove some company-proprietary code, but the
samples above should be decently complete.  Thanks.

Reply via email to