FasterXML / jackson-dataformat-xml反序列化混合有序标记

时间:2015-03-16 21:32:57

标签: java xml jackson

我有来自客户的xml:

<a>
   <b id="id1"/>
   <any-tag/>
   <b id="id2"/>
</a>

简单的Java类

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.ToString;

import java.util.List;

@ToString
public class A {

    @ToString
    public static class B {
        public String id;
    }


    @JacksonXmlProperty(localName = "b")
    @JacksonXmlElementWrapper(useWrapping = false)
    public List<B> bList;
}

当杰克逊完成解析时,我有结果

A(bList=[A.B(id=id2)])

很明显,我只获得了第二个标签,但预计 bList 中有2个标签。我意识到这是因为 any-tag 标签位于第一个和第二个标签B之间。

如何读取列表中的所有B标签? PS标签A包含其他应该阅读的内容。

我正在使用:

'com.fasterxml.jackson.core:jackson-databind:2.5.1',
'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.5.1',
'org.codehaus.woodstox:woodstox-core-asl:4.1.4',

1 个答案:

答案 0 :(得分:0)

从2.9版开始,引入了 @JsonMerge 批注。 以下将每次出现的节点 b 聚合到bList中:

@JacksonXmlProperty(localName = "b") 
@JsonMerge() 
public List<B> bList;