Hi, my project use Castor, and I have one question.

I created a field handler named TimeHander.java like this: 

public class TimeHandler extends GeneralizedFieldHandler {

    private SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");

    public TimeHandler() {
        super();
    }

    public void setConfiguration(Properties config) throws ValidityException {
        String pattern = config.getProperty("date-format");
        if (pattern == null) {
            throw new ValidityException("need parameter \"date-format\"");
        }
        try {
            formatter = new SimpleDateFormat(pattern);
        } catch (IllegalArgumentException e) {
            throw new ValidityException("the parameter \"" + pattern + "\" 
invalid");
        }
    }


    public Object convertUponGet(Object value) {
        if (value == null) return null;
        Date date = (Date) value;
        return formatter.format(date);

    }

    public Object convertUponSet(Object value) {
        Date date = null;
        try {
            if (StringUtils.isEmpty((String) value)) {
                return date;
            }
            date = formatter.parse((String) value);
        }
        catch (ParseException px) {
            throw new IllegalArgumentException(px.getMessage());
        }
        return date;

    }

    public Class getFieldType() {
        return Date.class;
    }


    public Object newInstance(Object parent) throws IllegalStateException {
        return null;
    }
}


and my Java bean has two java.util.Date type fields, 
to make Castor work correctly, 
I have to define two <field-handler/> in mapping file like this:
...
...
<field-handler name="timeHandler1" class="TimeHandler">
    <param name="date-format" value="yyyyMMdd"/>
</field-handler>
<field-handler name="timeHandler2" class="TimeHandler">
    <param name="date-format" value="yyyyMMdd"/>
</field-handler>
...
...
<class name="Mybean ">
    <map-to xml="MyBean"/>
    <field name="time1" type="java.lang.String" handler="timeHandler1">
        <bind-xml name="Time1" node="element"/>
    </field>
    <field name="time2" type="java.lang.String" handler="timeHandler2">
        <bind-xml name="Time2" node="element"/>
    </field>
</class>
....

that's mean: one field , one  <field-handler/> , even the same processing 
logic. 

But my project has dozens of Java beans, and has dozens of Date-type fileds, 
so, I have to define dozens of <field-handler/>, it is so terrible....

Is there any advices?

Regards

Joey

2011-3-9


Reply via email to