jaxb解组器:没有包装器的重复xmlelement b1 b2

jaxb解组器:没有包装器的重复xmlelement b1 b2,jaxb,jackson,Jaxb,Jackson,由于所有的都不包含在包装器元素中,比如说当我使用JacksonXmlMapper将XML文件读取到我的pojojavabean类时,我遇到了异常 com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.xxxxx] from String value; no single-String constructor/factory met

由于所有的
都不包含在包装器元素中,比如说
当我使用Jackson
XmlMapper
将XML文件读取到我的pojojavabean类时,我遇到了异常

com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.xxxxx] from String value; no single-String constructor/factory method (through reference chain: com.xxxx["xxx"]->com.xxx["xxx"])
我应该使用什么注释

@xmlement
公开名单b3;

杰克逊不知道如何将字符串转换为
B3
的实例。将构造函数(或返回
B3
的工厂方法)添加到
B3
,该构造函数接受单个
字符串。构造函数示例:

class B3 {
    // ...
    public B3(String value) {
       // do something with value 
    }
    // ...
}

如果要使用“展开”表示,则需要使用Jackson 2.1,并指示“展开”选项:

@JacksonXmlElementWrapper(useWrapping=false)
或者,如果使用JAXB注释,默认情况下不应使用包装

最后,您还可以将默认值更改为不使用包装器元素,包括:

JacksonXmlModule module = new JacksonXmlModule();
// to default to using "unwrapped" Lists:
module.setDefaultUseWrapper(false);
XmlMapper xmlMapper = new XmlMapper(module);
注意

Jackson不是一个兼容的实现。这意味着无法保证它如何解释标准JAXB注释


默认情况下,兼容实现不会将包装器元素应用于集合属性

A

默认情况下,JAXB(JSR-222)实现将基于属性默认映射。为了节省空间,我省略了这些方法,并指定了
@xmlacessortype(xmlacesstype.FIELD)
,以便元数据将从实例变量(字段)派生

用于UM13097559的包;
导入java.util.List;
导入javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
公共A类{
专用字符串b1;
私有字符串b2;
私人名单b3;
}
B3

用于UM13097559的包;
导入javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
公共级B3{
私有字符串c1;
私有字符串c2;
}
演示

用于UM13097559的包;
导入java.io.File;
导入javax.xml.bind.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(A.class);
Unmarshaller Unmarshaller=jc.createUnmarshaller();
文件xml=新文件(“src/forum13097559/input.xml”);
A=(A)unmarshaller.unmarshal(xml);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
元帅(a,系统输出);
}
}
input.xml/Output