I have the following method within my Object which is mapped to
BeanSerializer/Deserializer:

    public void setValidDates( java.util.ArrayList newValue )
    {
        validDates = newValue;
    }

During deserialization, I was getting the following error:

- Could not convert [Ljava.lang.Object; to bean field 'validDates[0]', type
java.util.Collection
- Exception:
java.lang.NullPointerException
        at
org.apache.axis.encoding.ser.BeanPropertyTarget.set(BeanPropertyTarget.java:136)
        at
org.apache.axis.encoding.DeserializerImpl.valueComplete(DeserializerImpl.java:258)
        at
org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:386)
        at
org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:834)
        at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:197)
        at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:578)
        at
org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:367)
        at
org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:834)
        at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:197)
        at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:578)
        at
org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:367)
        at
org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:834)
        at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:197)
        at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:578)
        at
org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:367)
        at
org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:834)
        at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:197)
        at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:578)
        at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:207)
        at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:231)
        at org.apache.axis.client.Call.invoke(Call.java:1607)


The result of the error turns out the the BeanPropertyDescriptor is
returning null for the call to getWriteMethod()
By making the 2 following changes to BeanDeserializer and
BeanPropertyTarget which simply checks for null as a result to
the call to getWriteMethod(), I was able to solve the problem.

BeanDeserializer.onStartChild() Line #199
         Changed from:
          if (propDesc.getWriteMethod().getParameterTypes().length == 1) {
         To:
               if (propDesc != null && (propDesc.getWriteMethod() != null)
                       &&
            (propDesc.getWriteMethod().getParameterTypes().length == 1)) {

BeanPropertyTarget.set(Object value):
     Enclosed the entire method contents into the following block:

        if(pd.getWriteMethod() != null)
        {

        }

Once the changes where made...Everything went smooth.

Thanks,
David Cole

Reply via email to