BeanDeserializer cannot deserialize the array in the complex type ------------------------------------------------------------------
Key: AXIS-2340 URL: http://issues.apache.org/jira/browse/AXIS-2340 Project: Apache Axis Type: Bug Components: Basic Architecture Versions: 1.3 Reporter: Dmytro Dyachuk Priority: Blocker The problem is the BeanSerializer throws an exception during deserializing the SOAP response on the clients stub. It seems that it tries to cast to some type "[J" which is definately is not long. The soap message is: <?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:createOrderResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://tpcapp.kvn.usask.ca"> <createOrderReturn href="#id0"/> </ns1:createOrderResponse> <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:CreateOrderResponse" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="structs.kvn.usask.ca"> <systemId xsi:type="xsd:string" xsi:nil="true"/> <orderId xsi:type="xsd:long">740488771</orderId> <orderStatus xsi:type="xsd:string">PENDING</orderStatus> <orederTotal xsi:type="xsd:double">72875.404390735</orederTotal> <orderTax xsi:type="xsd:double">12442.961820735</orderTax> <orderShipCost xsi:type="xsd:double">28154.98</orderShipCost> <discount xsi:type="xsd:double">42.34</discount> <itemId xsi:type="xsd:long">7838</itemId> <itemId xsi:type="xsd:long">78844</itemId> <itemId xsi:type="xsd:long">50151</itemId> <itemId xsi:type="xsd:long">80088</itemId> <itemId xsi:type="xsd:long">88702</itemId> <itemId xsi:type="xsd:long">64908</itemId> <itemQty xsi:type="xsd:long">2</itemQty> <itemQty xsi:type="xsd:long">6</itemQty> <itemQty xsi:type="xsd:long">6</itemQty> <itemQty xsi:type="xsd:long">1</itemQty> <itemQty xsi:type="xsd:long">7</itemQty> <itemQty xsi:type="xsd:long">4</itemQty> <itemCost xsi:type="xsd:double">455.28</itemCost> <itemCost xsi:type="xsd:double">1935.29</itemCost> <itemCost xsi:type="xsd:double">3383.91</itemCost> <itemCost xsi:type="xsd:double">98.62</itemCost> <itemCost xsi:type="xsd:double">2256.43</itemCost> <itemCost xsi:type="xsd:double">1814.89</itemCost> <itemStatus xsi:type="xsd:string">PENDING</itemStatus> <itemStatus xsi:type="xsd:string">PENDING</itemStatus> <itemStatus xsi:type="xsd:string">PENDING</itemStatus> <itemStatus xsi:type="xsd:string">PENDING</itemStatus> <itemStatus xsi:type="xsd:string">PENDING</itemStatus> <itemStatus xsi:type="xsd:string">PENDING</itemStatus> </multiRef> </soapenv:Body> </soapenv:Envelope> The exception: - Could not convert java.lang.Long to bean field 'itemId', type [J - Exception: java.lang.IllegalArgumentException: argument type mismatch at org.apache.axis.encoding.ser.BeanPropertyTarget.set(BeanPropertyTarget.java:157) at org.apache.axis.encoding.DeserializerImpl.valueComplete(DeserializerImpl.java:249) at org.apache.axis.encoding.DeserializerImpl.endElement(DeserializerImpl.java:509) at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:171) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141) at org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:369) at org.apache.axis.encoding.ser.BeanDeserializer.startElement(BeanDeserializer.java:154) at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1048) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236) at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384) at org.apache.axis.client.Call.invoke(Call.java:2467) at org.apache.axis.client.Call.invoke(Call.java:2366) at org.apache.axis.client.Call.invoke(Call.java:1812) at ca.usask.kvn.tpcapp.client.axis.BookStoreService.BookStoreServiceSoapBindingStub.createOrder(BookStoreServiceSoapBindingStub.java:603) at ca.usask.kvn.tpcapp.client.BookstoreClient.createNewOrder(BookstoreClient.java:135) at ca.usask.kvn.tpcapp.client.ClientSuite.main(ClientSuite.java:55) The code of the generated stub: /** * CreateOrderResponse.java * * This file was auto-generated from WSDL * by the Apache Axis 1.3 Oct 05, 2005 (05:23:37 EDT) WSDL2Java emitter. */ package ca.usask.kvn.tpcapp.client.axis.structs; public class CreateOrderResponse extends ca.usask.kvn.tpcapp.client.axis.structs.Response implements java.io.Serializable { private long orderId; private java.lang.String orderStatus; private double orederTotal; private double orderTax; private double orderShipCost; private double discount; private long[] itemId; private long[] itemQty; private double[] itemCost; private java.lang.String[] itemStatus; public CreateOrderResponse() { } public CreateOrderResponse( java.lang.String systemId, long orderId, java.lang.String orderStatus, double orederTotal, double orderTax, double orderShipCost, double discount, long[] itemId, long[] itemQty, double[] itemCost, java.lang.String[] itemStatus) { super( systemId); this.orderId = orderId; this.orderStatus = orderStatus; this.orederTotal = orederTotal; this.orderTax = orderTax; this.orderShipCost = orderShipCost; this.discount = discount; this.itemId = itemId; this.itemQty = itemQty; this.itemCost = itemCost; this.itemStatus = itemStatus; } /** * Gets the orderId value for this CreateOrderResponse. * * @return orderId */ public long getOrderId() { return orderId; } /** * Sets the orderId value for this CreateOrderResponse. * * @param orderId */ public void setOrderId(long orderId) { this.orderId = orderId; } /** * Gets the orderStatus value for this CreateOrderResponse. * * @return orderStatus */ public java.lang.String getOrderStatus() { return orderStatus; } /** * Sets the orderStatus value for this CreateOrderResponse. * * @param orderStatus */ public void setOrderStatus(java.lang.String orderStatus) { this.orderStatus = orderStatus; } /** * Gets the orederTotal value for this CreateOrderResponse. * * @return orederTotal */ public double getOrederTotal() { return orederTotal; } /** * Sets the orederTotal value for this CreateOrderResponse. * * @param orederTotal */ public void setOrederTotal(double orederTotal) { this.orederTotal = orederTotal; } /** * Gets the orderTax value for this CreateOrderResponse. * * @return orderTax */ public double getOrderTax() { return orderTax; } /** * Sets the orderTax value for this CreateOrderResponse. * * @param orderTax */ public void setOrderTax(double orderTax) { this.orderTax = orderTax; } /** * Gets the orderShipCost value for this CreateOrderResponse. * * @return orderShipCost */ public double getOrderShipCost() { return orderShipCost; } /** * Sets the orderShipCost value for this CreateOrderResponse. * * @param orderShipCost */ public void setOrderShipCost(double orderShipCost) { this.orderShipCost = orderShipCost; } /** * Gets the discount value for this CreateOrderResponse. * * @return discount */ public double getDiscount() { return discount; } /** * Sets the discount value for this CreateOrderResponse. * * @param discount */ public void setDiscount(double discount) { this.discount = discount; } /** * Gets the itemId value for this CreateOrderResponse. * * @return itemId */ public long[] getItemId() { return itemId; } /** * Sets the itemId value for this CreateOrderResponse. * * @param itemId */ public void setItemId(long[] itemId) { this.itemId = itemId; } /** * Gets the itemQty value for this CreateOrderResponse. * * @return itemQty */ public long[] getItemQty() { return itemQty; } /** * Sets the itemQty value for this CreateOrderResponse. * * @param itemQty */ public void setItemQty(long[] itemQty) { this.itemQty = itemQty; } /** * Gets the itemCost value for this CreateOrderResponse. * * @return itemCost */ public double[] getItemCost() { return itemCost; } /** * Sets the itemCost value for this CreateOrderResponse. * * @param itemCost */ public void setItemCost(double[] itemCost) { this.itemCost = itemCost; } /** * Gets the itemStatus value for this CreateOrderResponse. * * @return itemStatus */ public java.lang.String[] getItemStatus() { return itemStatus; } /** * Sets the itemStatus value for this CreateOrderResponse. * * @param itemStatus */ public void setItemStatus(java.lang.String[] itemStatus) { this.itemStatus = itemStatus; } private java.lang.Object __equalsCalc = null; public synchronized boolean equals(java.lang.Object obj) { if (!(obj instanceof CreateOrderResponse)) return false; CreateOrderResponse other = (CreateOrderResponse) obj; if (obj == null) return false; if (this == obj) return true; if (__equalsCalc != null) { return (__equalsCalc == obj); } __equalsCalc = obj; boolean _equals; _equals = super.equals(obj) && this.orderId == other.getOrderId() && ((this.orderStatus==null && other.getOrderStatus()==null) || (this.orderStatus!=null && this.orderStatus.equals(other.getOrderStatus()))) && this.orederTotal == other.getOrederTotal() && this.orderTax == other.getOrderTax() && this.orderShipCost == other.getOrderShipCost() && this.discount == other.getDiscount() && ((this.itemId==null && other.getItemId()==null) || (this.itemId!=null && java.util.Arrays.equals(this.itemId, other.getItemId()))) && ((this.itemQty==null && other.getItemQty()==null) || (this.itemQty!=null && java.util.Arrays.equals(this.itemQty, other.getItemQty()))) && ((this.itemCost==null && other.getItemCost()==null) || (this.itemCost!=null && java.util.Arrays.equals(this.itemCost, other.getItemCost()))) && ((this.itemStatus==null && other.getItemStatus()==null) || (this.itemStatus!=null && java.util.Arrays.equals(this.itemStatus, other.getItemStatus()))); __equalsCalc = null; return _equals; } private boolean __hashCodeCalc = false; public synchronized int hashCode() { if (__hashCodeCalc) { return 0; } __hashCodeCalc = true; int _hashCode = super.hashCode(); _hashCode += new Long(getOrderId()).hashCode(); if (getOrderStatus() != null) { _hashCode += getOrderStatus().hashCode(); } _hashCode += new Double(getOrederTotal()).hashCode(); _hashCode += new Double(getOrderTax()).hashCode(); _hashCode += new Double(getOrderShipCost()).hashCode(); _hashCode += new Double(getDiscount()).hashCode(); if (getItemId() != null) { for (int i=0; i<java.lang.reflect.Array.getLength(getItemId()); i++) { java.lang.Object obj = java.lang.reflect.Array.get(getItemId(), i); if (obj != null && !obj.getClass().isArray()) { _hashCode += obj.hashCode(); } } } if (getItemQty() != null) { for (int i=0; i<java.lang.reflect.Array.getLength(getItemQty()); i++) { java.lang.Object obj = java.lang.reflect.Array.get(getItemQty(), i); if (obj != null && !obj.getClass().isArray()) { _hashCode += obj.hashCode(); } } } if (getItemCost() != null) { for (int i=0; i<java.lang.reflect.Array.getLength(getItemCost()); i++) { java.lang.Object obj = java.lang.reflect.Array.get(getItemCost(), i); if (obj != null && !obj.getClass().isArray()) { _hashCode += obj.hashCode(); } } } if (getItemStatus() != null) { for (int i=0; i<java.lang.reflect.Array.getLength(getItemStatus()); i++) { java.lang.Object obj = java.lang.reflect.Array.get(getItemStatus(), 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(CreateOrderResponse.class, true); static { typeDesc.setXmlType(new javax.xml.namespace.QName("structs.kvn.usask.ca", "CreateOrderResponse")); org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc(); elemField.setFieldName("orderId"); elemField.setXmlName(new javax.xml.namespace.QName("", "orderId")); elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "long")); elemField.setNillable(false); typeDesc.addFieldDesc(elemField); elemField = new org.apache.axis.description.ElementDesc(); elemField.setFieldName("orderStatus"); elemField.setXmlName(new javax.xml.namespace.QName("", "orderStatus")); elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); elemField.setNillable(true); typeDesc.addFieldDesc(elemField); elemField = new org.apache.axis.description.ElementDesc(); elemField.setFieldName("orederTotal"); elemField.setXmlName(new javax.xml.namespace.QName("", "orederTotal")); elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "double")); elemField.setNillable(false); typeDesc.addFieldDesc(elemField); elemField = new org.apache.axis.description.ElementDesc(); elemField.setFieldName("orderTax"); elemField.setXmlName(new javax.xml.namespace.QName("", "orderTax")); elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "double")); elemField.setNillable(false); typeDesc.addFieldDesc(elemField); elemField = new org.apache.axis.description.ElementDesc(); elemField.setFieldName("orderShipCost"); elemField.setXmlName(new javax.xml.namespace.QName("", "orderShipCost")); elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "double")); elemField.setNillable(false); typeDesc.addFieldDesc(elemField); elemField = new org.apache.axis.description.ElementDesc(); elemField.setFieldName("discount"); elemField.setXmlName(new javax.xml.namespace.QName("", "discount")); elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "double")); elemField.setNillable(false); typeDesc.addFieldDesc(elemField); elemField = new org.apache.axis.description.ElementDesc(); elemField.setFieldName("itemId"); elemField.setXmlName(new javax.xml.namespace.QName("", "itemId")); elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "long")); elemField.setNillable(true); typeDesc.addFieldDesc(elemField); elemField = new org.apache.axis.description.ElementDesc(); elemField.setFieldName("itemQty"); elemField.setXmlName(new javax.xml.namespace.QName("", "itemQty")); elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "long")); elemField.setNillable(true); typeDesc.addFieldDesc(elemField); elemField = new org.apache.axis.description.ElementDesc(); elemField.setFieldName("itemCost"); elemField.setXmlName(new javax.xml.namespace.QName("", "itemCost")); elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "double")); elemField.setNillable(true); typeDesc.addFieldDesc(elemField); elemField = new org.apache.axis.description.ElementDesc(); elemField.setFieldName("itemStatus"); elemField.setXmlName(new javax.xml.namespace.QName("", "itemStatus")); elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); elemField.setNillable(true); typeDesc.addFieldDesc(elemField); } /** * 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); } } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira