Java Jackson XML-反序列化空类和多态性
我有以下界面:Java Jackson XML-反序列化空类和多态性,java,xml,jackson,polymorphism,deserialization,Java,Xml,Jackson,Polymorphism,Deserialization,我有以下界面: @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT) @JsonSubTypes({ @JsonSubTypes.Type(value = EmptyProxy.class, name = "empty"), ... other types not included ... }) public interface Proxy { }
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({
@JsonSubTypes.Type(value = EmptyProxy.class, name = "empty"),
... other types not included ...
})
public interface Proxy {
}
我有以下实施:
@JsonTypeName("empty")
public static class EmptyProxy implements Proxy {
}
正如您所看到的,它只是一个空类。我将其他(正在工作的)实现排除在本例之外
我有以下容器数据类:
public static class Data {
@JacksonXmlProperty(localName = "name")
private String name;
@JacksonXmlProperty(localName = "proxy")
private Proxy proxy;
}
反序列化EmptyProxy
似乎不起作用。例如:
final ObjectMapper mapper = new XmlMapper().registerModule(new JacksonXmlModule());
final Data data = mapper.readValue("<data><name>my-name</name><proxy><empty/></proxy></data>", Data.class);
这是杰克逊的错误吗?FWIW,当我向EmptyProxy
添加一个虚拟字段时,它会工作
更新
我只尝试了JAXB,得到了相同的结果。代码:
public static class Data {
@XmlElement(name = "name")
private String name;
@XmlElements({
@XmlElement(type = EmptyProxy.class, name = "empty")
})
private Proxy proxy;
}
public interface Proxy {
}
@XmlType(name = "empty")
public static class EmptyProxy implements Proxy {
}
public static void main(String[] a) throws IOException {
final ObjectMapper mapper = new XmlMapper()/*.registerModule(new JacksonXmlModule())*/.registerModule(new JaxbAnnotationModule());
final Data data = mapper.readValue("<data><name>my-name</name><proxy><empty></empty></proxy></data>", Data.class);
}
公共静态类数据{
@xmlement(name=“name”)
私有字符串名称;
@XmlElements({
@XmlElement(type=EmptyProxy.class,name=“empty”)
})
私有代理;
}
公共接口代理{
}
@XmlType(name=“empty”)
公共静态类EmptyProxy实现代理{
}
公共静态void main(字符串[]a)引发IOException{
final ObjectMapper mapper=new-XmlMapper()/*.registerModule(new-JacksonXmlModule())*/.registerModule(new-JaxbAnnotationModule());
最终数据=mapper.readValue(“我的名字”,Data.class);
}
我已经为此创建了一个bug条目。请参阅。我还创建了一个错误报告:
public static class Data {
@XmlElement(name = "name")
private String name;
@XmlElements({
@XmlElement(type = EmptyProxy.class, name = "empty")
})
private Proxy proxy;
}
public interface Proxy {
}
@XmlType(name = "empty")
public static class EmptyProxy implements Proxy {
}
public static void main(String[] a) throws IOException {
final ObjectMapper mapper = new XmlMapper()/*.registerModule(new JacksonXmlModule())*/.registerModule(new JaxbAnnotationModule());
final Data data = mapper.readValue("<data><name>my-name</name><proxy><empty></empty></proxy></data>", Data.class);
}