marshalling - 如何告诉castor将空字段编码到空标签?

标签 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>

最佳答案

实现此目的的一种方法是使用 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;
    }

}

关于marshalling - 如何告诉castor将空字段编码到空标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9176479/

相关文章:

c# - 将指针从非托管代码返回到托管代码

http-post - RestEasy 客户端身份验证和带编码的 HTTP 放置

java - 使用 Castor 和 Grails 进行 XML 解码

spring - org.springframework.oxm.UnmarshallingFailureException : JAXB unmarshalling exception unexpected element (uri :"", 本地 :"html")

java - 隐式集合的 XStream 问题

java - 如何让 XStream 映射回类型化列表?

java - JAXB 和用于映射到 HashMap 内的基本类型的 XmlAdapter

java - spring boot : java. lang.IllegalArgumentException: 对象不是声明类的实例

xml - 类似于 Castor 的 Delphi 框架

java - JAXB 编码 XMPP 节