Hi !
I'm using a ConfigurableFieldHandler to format date attributes of java
objects :
public class Request
private Date creationDate;
private Certificate producedCertificate;
public class Certificate
private Date revocationDate;
My mapping file is :
<class name="Request" auto-complete="false" verify-constructable="false">
<map-to xml="request"/>
<field name="creationDate" type="java.util.Date"
handler="myDateFormatHandler">
<bind-xml name="creationDate" node="element"/>
</field>
<field name="producedCertificate"
type="com.keynectis.sequoia.ra.core.domain.certificate.bean.CertificateBean">
<bind-xml name="certificate" node="element"/>
</field>
</class>
<class name="Certificate" auto-complete="false"
verify-constructable="false">
<map-to xml="certificate"/>
<field name="revocationDate" type="java.util.Date"
handler="myDateFormatHandler">
<bind-xml name="revocationDate" node="element"/>
</field>
</class>
<field-handler name="myDateFormatHandler" class="DateFormatHandler">
<param name="date-format" value="yyyy/MM/dd"/>
</field-handler>
Unfortunately, the preceding (two identical handler declarations) leads to
IllegalArgumentException :
java.lang.IllegalArgumentException: object is not an instance of declaring
class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.exolab.castor.mapping.loader.FieldHandlerImpl.getValue(FieldHandlerImpl.java:413)
at
org.exolab.castor.mapping.GeneralizedFieldHandler.getValue(GeneralizedFieldHandler.java:178)
at
org.exolab.castor.mapping.loader.FieldHandlerImpl.getValue(FieldHandlerImpl.java:387)
at
org.exolab.castor.xml.handlers.DateFieldHandler.getValue(DateFieldHandler.java:117)
at
org.exolab.castor.xml.FieldValidator.validate(FieldValidator.java:191)
at
org.exolab.castor.xml.util.XMLClassDescriptorImpl.validate(XMLClassDescriptorImpl.java:1065)
at org.exolab.castor.xml.Validator.validate(Validator.java:135)
at
org.exolab.castor.xml.FieldValidator.validateInstance(FieldValidator.java:326)
at
org.exolab.castor.xml.FieldValidator.validate(FieldValidator.java:256)
at
org.exolab.castor.xml.util.XMLClassDescriptorImpl.validate(XMLClassDescriptorImpl.java:1065)
at org.exolab.castor.xml.Validator.validate(Validator.java:135)
at
org.exolab.castor.xml.FieldValidator.validateInstance(FieldValidator.java:326)
at
org.exolab.castor.xml.FieldValidator.validate(FieldValidator.java:256)
at
org.exolab.castor.xml.util.XMLClassDescriptorImpl.validate(XMLClassDescriptorImpl.java:1065)
at org.exolab.castor.xml.Validator.validate(Validator.java:135)
at org.exolab.castor.xml.Marshaller.validate(Marshaller.java:2594)
at org.exolab.castor.xml.Marshaller.marshal(Marshaller.java:826)
If I add another fieldHandler like this :
<field-handler name="anotherDateFormatHandler" class="DateFormatHandler">
<param name="date-format" value="yyyy/MM/dd"/>
</field-handler>
and if I replace one of the two handler declarations
<field name="revocationDate" type="java.util.Date"
handler="anotherDateFormatHandler">
for example, it works perfectly.
Could someone explain me why ?
Thanks in advance
Eric