2012-02-07 73 views
2

我正在编组可以将某些字段设置为空的对象。我正在使用带有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> 

回答

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; 
    } 

} 
+0

由于布莱恩,我evenutally发现,如果我在映射设置所需和的nillable属性,空值将被序列化到空标签。 – 2012-02-26 22:09:21