xml java转换框架Castor记录

由于项目需要和其他公司合作开发,所以需要XML来作为传输数据格式。

感觉DOM SAX JAXP 用起来过于复杂,就选择了Castor这个框架,在使用过程中碰到了一些问题记录一下。

 

 

1: Castor 和 Spring 整合

 

<bean id="resolver" class="org.castor.spring.xml.CastorResolverFactoryBean">
        <property name="mappingLocations">
            <list>
                <value>mapping.xml</value>
            </list>
        </property>
    </bean>


定义从xml  组装成 java 对象 bean
    <bean id="unmarshaller" class="org.castor.spring.xml.CastorUnmarshallerFactoryBean">

        <property name="resolver">
            <ref local="resolver" />
        </property>
    </bean>


定义从java 对象 组装成 xml bean
    <bean id="marshaller" class="org.castor.spring.xml.CastorMarshallerFactoryBean">
        <property name="resolver">
            <ref local="resolver" />
        </property>
    </bean>

 

代码调用

                DATA data=new DATA();
                data.setGatewayId(1L);
                data.setNodeId(1L);
                data.setTime(new Date());
                data.setFRQ(2.00f);
    
               StringWriter writer=new StringWriter();
                marshaller.setWriter(writer);
                marshaller.marshal(data) ;
 

 

 

 

2: 有一些特殊的字段比如时间格式 需要自定义 fileHandler

 

 

 

public class TimeHandlerImpl extends GeneralizedFieldHandler {

    public final DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

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

    @Override
    public Object convertUponSet(Object value) {
        if(value==null)
            return null;
        String dateStr = (String) value;

        try {
            return format.parse(dateStr);
        }

        catch (ParseException e) {
            throw new RuntimeException(e);
        }

    }

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

}

 
mapping.xml 当中定义时间格式字段
   <field name="time" type="string"  handler="xxxx.TimeHandlerImpl">
            <bind-xml name="time" node="element" />
        </field>



参考:1 http://www.castor.org/1.2/xml-mapping.html#Sample-1:-Defining-a-custom-field-handler
            2 http://www.ibm.com/developerworks/cn/xml/x-bindcastor/

你可能感兴趣的:(java,spring,xml,框架,bean)