Hi Eric,
can you please create a new Jira issue at
http://jira.codehaus.org/browse/CASTOR
and attach all relevant artifacts such as mapping file, domain classes,
handler classes, JUnit test case.
If you happen to be using Maven, you could use the Castor XML test case
archetype to get such a project created.
Regards
Werner
Eric Tournier wrote:
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
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email