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