如何告诉castor将空字段编组为空标记?

时间:2012-02-07 12:43:12

标签: marshalling castor oxm

我正在编组一个可以将某个字段设置为null的对象。我正在使用带有xml映射文件的castor进行配置。我正在编组的课程是这样的:

class Entity {
    private int id;
    private String name;
    private String description; // THIS CAN BE NULL
    /* ... getters and setters follow ... */
}

...和这样的映射文件:

<mapping>
    <class name="Entity">
        <field name="id" type="integer"/>
        <field name="name" type="string"/>
        <field name="description" type="string"/>
    </class>
</mapping>

如果字段为空,我现在得到的是什么(简化示例):

<entity>
   <id>123</id>
   <name>Some Name</name>
</entity>

虽然我想在结果XML中有一个空标记,即使描述字段为空。

<entity>
   <id>123</id>
   <name>Some Name</name>
   <description /> <!-- open/close tags would be ok -->
</entity>

1 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是使用GeneralizedFieldHandler。这有点像黑客攻击,但它适用于其他字符串。

示例:

<mapping>
    <class name="Entity">
        <field name="id" type="integer"/>
        <field name="name" type="string"/>
        <field name="description" type="string" handler="NullHandler"/>
    </class>
</mapping>


public class NullHandler extends GeneralizedFieldHandler {

    @Override
    public Object convertUponGet( Object arg0 )
    {
        if( arg0 == null )
        {
            return "";
        }

        return arg0;
    }

    @Override
    public Object convertUponSet( Object arg0 )
    {
        return arg0;
    }

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

}