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

Reply via email to