Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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 Jackson XML-反序列化空类和多态性_Java_Xml_Jackson_Polymorphism_Deserialization - Fatal编程技术网

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);
}