在JAXB ArrayList中抑制空字符串元素

时间:2014-06-05 00:51:16

标签: java xml jaxb

有解决方案忽略空字符串元素,但在我的情况下,我有一个数组列表,其中有许多空字符串(非空)。

所以我在生成的输出中得到了很多空元素。

想法?

@XmlElement
private List<String> fileNumber;

这是输出:

<fileNumber>25478</fileNumber>
<fileNumber>45875</fileNumber>
<fileNumber></fileNumber>
<fileNumber></fileNumber>

我可以通过在setFileNumber的列表中删除它们来解决这个问题。 (如下所示)

public void setFileNumber(List<String> fileNumber) {
    fileNumber.removeAll(Collections.singleton(""));
    this.fileNumber = fileNumber;
}

但JAXB级别有解决方案吗?像nillable一样?

1 个答案:

答案 0 :(得分:0)

您可以为此用例使用marshal事件回调方法(请参阅:http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/Marshaller.html#marshalEventCallback)。此方法将继承具有fileNumber属性的类,并且您的JAXB实现将在调整该对象之前调用此方法,从而使您有机会进行任何必要的清理。

private void beforeMarshal(Marshaller marshaller) {
    fileNumber.removeAll(Collections.singleton(""));
}