如何强制Jackson关闭一个空的XML元素?

时间:2013-07-09 14:56:06

标签: xml serialization jackson

我正在尝试使用Jackson将简单对象序列化为XML但我无法关闭空XML元素。 我明白了

<SimplePojo name="simpleName">
</SimplePojo>

但我想要这个

<SimplePojo name="simpleName"/>

如果有设置,我找不到它。 任何帮助将不胜感激。


public class SimplePojo
{
    public SimplePojo(String name)
    {
        this.name = name;       
    }

    @JacksonXmlProperty(isAttribute = true)
    private String name;

    public String getName()
    {
        return this.name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    @JsonInclude(Include.NON_EMPTY) 
    private String property;

    public String getProperty()
    {
        return property;
    }

    public void setProperty(String property)
    {
        this.property = property;
    }
}

我正在使用这样的课程:

 JacksonXmlModule module = new JacksonXmlModule();
    module.setDefaultUseWrapper(false);

    XmlMapper xmlMapper = new XmlMapper(module); 
    xmlMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
    SimplePojo simple = new SimplePojo("simpleName");
    //simple.setProperty("something");

    String res = xmlMapper.writeValueAsString(simple);

修改 这是我正在使用的罐子列表

Jackson jars

2 个答案:

答案 0 :(得分:1)

我也使用2.3.1和2.2.3版本的jackson-data-format-xml来解决这个问题。通过添加与您相同的Woodstox罐来管理解决它。所以很确定修复与缩进无关。

如果您不确定是否使用Woodstox,则明确创建woodstox XMLFactory并在XMLMapper

中使用它
XmlFactory xmlFactory = new XmlFactory(new WstxInputFactory(), new WstxOutputFactory());
XmlMapper mapper = new XmlMapper (xmlFactory, module);
祝你好运!

答案 1 :(得分:0)

要尝试的一件事是确保使用Woodstox作为Stax实现,而不是JDK提供的默认值(Sun的SJSXP)。 Woodstox总体上更好,我认为如果可能的话它也隐含地使用空元素,而我认为SJSXP不会。