Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用嵌套列表反序列化xml?_Java_Xml_Spring_Jackson_Jaxb - Fatal编程技术网

Java 如何使用嵌套列表反序列化xml?

Java 如何使用嵌套列表反序列化xml?,java,xml,spring,jackson,jaxb,Java,Xml,Spring,Jackson,Jaxb,如何读取包含嵌套列表的xml响应? 以下选项无效,表示嵌套列表始终为空。为什么? JacksonXmlModule xmlMod = new JacksonXmlModule(); xmlMod.setDefaultUseWrapper(false); ObjectMapper m = (new Jackson2ObjectMapperBuilder()) .createXmlMapper(true) .modules(x

如何读取包含嵌套列表的xml响应? 以下选项无效,表示嵌套列表始终为空。为什么?

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

    ObjectMapper m = (new Jackson2ObjectMapperBuilder())
            .createXmlMapper(true)
            .modules(xmlMod, new JaxbAnnotationModule())
            .build();


    PersonResponse rsp = m.readValue(ReaderUtil.read("person.xml"), PersonResponse.class)

//all fields having getter + setter, omitted for readability
@XmlRootElement
public class PersonResponse {
    @XmlElement(required = true)
    private Persons persons;

    @XmlAccessorType(XmlAccessType.FIELD)
    public static class Persons {
        @XmlElement(required = true)
        List<Person> person;

        @XmlAccessorType(XmlAccessType.FIELD)
        public static class Person {
            @XmlAttribute(name="firstname", required=true)
            private String firstname;
        }
    }
}
JacksonXmlModule xmlMod=新的JacksonXmlModule();
xmlMod.setDefaultUseWrapper(false);
ObjectMapper m=(新的Jackson2ObjectMapperBuilder())
.createXmlMapper(true)
.modules(xmlMod,新的JaxbAnnotationModule())
.build();
PersonResponse rsp=m.readValue(ReaderUtil.read(“person.xml”),PersonResponse.class)
//所有具有getter+setter的字段,为了可读性而省略
@XmlRootElement
公共类人员响应{
@XmlElement(必需=true)
私人;
@XmlAccessorType(XmlAccessType.FIELD)
公众人士{
@XmlElement(必需=true)
名单上的人;
@XmlAccessorType(XmlAccessType.FIELD)
公共静态类人员{
@XmlAttribute(name=“firstname”,必需=true)
私有字符串名;
}
}
}
person.xml:

<response>
    <persons>
        <person firstname="test" />
        <person firstname="john" />
    </persons>
</response>


结果:
person
列表在响应对象中始终为空。为什么?

您可能在
私人之前缺少
@xmlement
这只是问题中的一个输入错误,请更正。我找不到答案(如果不坚持太多符合我的口味)。在这一点上,我开始认为当我想使用Jackson时,我应该使用Jackson注释,当我想使用JAXB注释时,我应该使用JAXB。这就是他们的观点。当然,对他们来说,友好相处似乎不是不可能的,但为什么不简单一点呢?原因是:我使用autogeneration从
XSD
创建
PersonResponse
,使用
maven
插件
cxf xjc插件
。据我所知,没有任何现有的自动生成插件可以添加
Jackson
注释(如果我错了,请纠正我)。只有
JAXB
注释可以自动生成。但是由于几个原因,我想使用jackson
ObjectMapper
,因此我必须坚持使用
jaxb
注释,并通过使用
JAXBANotationModule
来教他jaxb注释。