Hi,
I think you've come across a bug that has already been raised with
Castor a few weeks ago. But as I am not 100% sure, can I please ask you
to create a new Jira issue and attach all files from this thread ?
Cheers
Werner
jrcdev01 wrote:
> Hi,
>
> Could someone explain why when I run the test class the value of the other
> date field is always null.
>
> value of startEventDate is OK.
> value of endEventDate is always NULL.
>
>
> // MyOrder bean class
>
> package sample;
>
> public class MyOrder {
>
> private ClientData clientData;
>
> public ClientData getClientData() {
> return clientData;
> }
>
> public void setClientData(ClientData clientData) {
> this.clientData = clientData;
> }
>
> }
>
> ---------
>
> // ClientData bean class
>
> package sample;
>
> public class ClientData {
>
> private java.util.Date startEventDate;
> private java.util.Date endEventDate;
>
> public java.util.Date getStartEventDate() {
> return startEventDate;
> }
> public void setStartEventDate(java.util.Date startEventDate) {
> this.startEventDate = startEventDate;
> }
> public java.util.Date getEndEventDate() {
> return endEventDate;
> }
> public void setEndEventDate(java.util.Date endEventDate) {
> this.endEventDate = endEventDate;
> }
>
> }
>
> ----------------
>
> //From the castor user guide..
>
> package sample;
>
> import java.text.ParseException;
> import java.text.SimpleDateFormat;
> import java.util.Date;
> import java.util.Properties;
>
> import org.exolab.castor.mapping.ConfigurableFieldHandler;
> import org.exolab.castor.mapping.GeneralizedFieldHandler;
> import org.exolab.castor.mapping.ValidityException;
>
> /**
> * The FieldHandler for the Date class
> *
> */
> public class MyDateHandler extends GeneralizedFieldHandler implements
> ConfigurableFieldHandler {
>
> /**
> * Creates a new MyDateHandler instance
> */
> public MyDateHandler() {
> super();
> }
>
> private SimpleDateFormat formatter;
>
> public void setConfiguration(final Properties config) throws
> ValidityException {
> String pattern = config.getProperty("date-format");
> if (pattern == null) {
> throw new ValidityException("Required parameter \"date-format\"
> is
> missing for FieldHandlerImpl.");
> }
> try {
> formatter = new SimpleDateFormat(pattern);
> } catch (IllegalArgumentException e) {
> throw new ValidityException("Pattern \""+pattern+"\" is not a
> valid
> date format.");
> }
> }
> /**
> * This method is used to convert the value when the
> * getValue method is called. The getValue method will
> * obtain the actual field value from given 'parent' object.
> * This convert method is then invoked with the field's
> * value. The value returned from this method will be
> * the actual value returned by getValue method.
> *
> * @param value the object value to convert after
> * performing a get operation
> * @return the converted value.
> */
> public Object convertUponGet(Object value) {
> if (value == null) return null;
> //SimpleDateFormat formatter = new SimpleDateFormat(FORMAT);
> Date date = (Date)value;
> return formatter.format(date);
> }
>
>
> /**
> * This method is used to convert the value when the
> * setValue method is called. The setValue method will
> * call this method to obtain the converted value.
> * The converted value will then be used as the value to
> * set for the field.
> *
> * @param value the object value to convert before
> * performing a set operation
> * @return the converted value.
> */
> public Object convertUponSet(Object value) {
> //SimpleDateFormat formatter = new SimpleDateFormat(FORMAT);
> Date date = null;
> try {
> date = formatter.parse((String)value);
> }
> catch(ParseException px) {
> throw new IllegalArgumentException(px.getMessage());
> }
> return date;
> }
>
> /**
> * Returns the class type for the field that this
> * GeneralizedFieldHandler converts to and from. This
> * should be the type that is used in the
> * object model.
> *
> * @return the class type of of the field
> */
> public Class getFieldType() {
> return Date.class;
> }
>
> /**
> * Creates a new instance of the object described by
> * this field.
> *
> * @param parent The object for which the field is created
> * @return A new instance of the field's value
> * @throws IllegalStateException This field is a simple
> * type and cannot be instantiated
> */
> public Object newInstance(Object parent) throws IllegalStateException
> {
> //-- Since it's marked as a string...just return null,
> //-- it's not needed.
> return null;
> }
>
> }
>
>
> ---------------------------------
>
> <?xml version="1.0"?>
> <!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Object Mapping DTD Version
> 1.0//EN" "http://castor.exolab.org/mapping.dtd">
>
> <mapping>
> <description>Description of the mapping</description>
>
> <field-handler name="myHandler" class="sample.MyDateHandler">
>
> </field-handler>
>
> <class name="sample.MyOrder">
> <map-to xml="myOrder"/>
>
> <field name="clientData" type="sample.ClientData"/>
> </class>
>
> <class name="sample.ClientData">
> <field name="startEventDate" type="string" handler="myHandler">
> <bind-xml name="startEventDate" node="element"/>
> </field>
>
> <field name="endEventDate" type="string" handler="myHandler">
> <bind-xml name="endEventDate" node="element"/>
> </field>
> </class>
> </mapping>
>
> ---------------
> sample data
>
> <?xml version="1.0"?>
> <myOrder>
> <clientData>
> <startEventDate>2010-08-08 16:54:41</startEventDate>
> <endEventDate>2010-08-08 16:54:42</endEventDate>
> </clientData>
> </myOrder>
>
> -----------------
>
> Test class
>
> package sample;
>
> import java.io.BufferedReader;
> import java.io.FileReader;
> import java.io.IOException;
> import java.io.Reader;
>
> import org.exolab.castor.mapping.Mapping;
> import org.exolab.castor.mapping.MappingException;
> import org.exolab.castor.xml.MarshalException;
> import org.exolab.castor.xml.Unmarshaller;
> import org.exolab.castor.xml.ValidationException;
>
> public class Test2 {
>
> public Test2() {
> processFile();
> }
>
> public static void main(String[] args) throws MarshalException,
> ValidationException, IOException, MappingException {
> new Test2();
> }
>
> public void processFile() {
> try {
> // -- Load a mapping file
> // Load the mapping file
> Mapping _mapping = new
> Mapping(getClass().getClassLoader());
> String MAPPING_FILE = "mapping.xml";
>
> _mapping.loadMapping(getClass().getResource(MAPPING_FILE));
>
> Unmarshaller un = new Unmarshaller(MyOrder.class);
> un.setMapping(_mapping);
>
> // -- Read in the Addressbook using the mapping
> Reader reader = new BufferedReader(new
> FileReader("test.xml"));
> MyOrder root = (MyOrder) un.unmarshal(reader);
>
> // -- Display the Event Type
>
> System.out.println(root.getClientData().getStartEventDate());
>
> System.out.println(root.getClientData().getEndEventDate());
> } catch (Exception e) {
> e.printStackTrace();
> }
> }
> }
>
>
>
> Can anyone help me on this..
>
> Thanks
>
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email