Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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_Jackson_Xsd_Jackson Dataformat Xml - Fatal编程技术网

Java “序列化XML”;选择“;杰克逊的元素

Java “序列化XML”;选择“;杰克逊的元素,java,xml,jackson,xsd,jackson-dataformat-xml,Java,Xml,Jackson,Xsd,Jackson Dataformat Xml,我们有这种形式的XSD: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0.

我们有这种形式的XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0.0">
    <xs:element name="SomeEndpoint">
        <xs:complexType>
            <xs:choice>
                <xs:element name="RequestPayload">
                    <!-- snip -->
                </xs:element>
                <xs:element name="ResponsePayload">
                    <!-- snip -->
                </xs:element>
                <xs:element name="ErrorPayload">
                    <!-- snip -->
                </xs:element>
            <xs:choice>
        </xs:complexType>
    </xs:element>
</xs:schema>
到目前为止,一切都很好——我们可以将Jackon 2.11.0与jackson dataformat xml:2.11.2一起使用,很好地序列化“真实”对象。FWIW,我们使用如下配置的映射器:

public XmlMapper payloadMapper(){
var xmlMapper=new xmlMapper();
registerModule(新的JavaTimeModule());
registerModule(新的JaxbAnnotationModule());
返回xmlMapper;
}
现在我们“只”需要包装标签,
SomeEndpoint
。我们尝试过的事情:

  • 根路径:我们认为可以通过
    @JsonRootName
    @JacksonXmlRootElement
    为POXO注入自定义的“根路径”。我们尝试传递名称,如
    SomeEndpoint.RequestPayload
    SomeEndpoint/RequestPayload
    ;不走运

  • 包装对象:这似乎是最自然的解决方案,但我们很难获得以属性命名的额外包装标签。尤其是,Jackson不接受这种变体:

    @JsonRootName(value=“SomeEndpoint”)
    类终结点包装器{
    @JsonTypeInfo(使用=JsonTypeInfo.Id.NAME,include=JsonTypeInfo.As.WRAPPER\u对象)
    @JsonUnwrapped
    目标有效载荷;
    }
    
    这一个仍然输出一个
    标记:

    @JsonRootName(value=“SomeEndpoint”)
    类终结点包装器{
    @XmlElements({
    @XmlElement(name=“RequestPayload”,type=SomeEndpointRequestPayload.class),
    @XmlElement(name=“ResponsePayload”,type=SomeEndpointResponsePayload.class),
    @XmlElement(name=“ErrorPayload”,type=SomeEndpointErrorPayload.class)
    })
    目标有效载荷;
    }
    
    我们尝试了太多的注释混合,无法在这里计数或复制,但这两种注释似乎“应该有效”

    注意:我们一直在使用标记接口而不是
    Object
    来将值限制为三种类型。因为它似乎对杰克逊没有什么影响,为了简单起见,我把它省略了

  • 解决方法:每个选项可以有一个属性:

    @数据
    @JsonRootName(value=“SomeEndpoint”)
    类终结点包装器{
    @JsonProperty(value=“请求”)
    私有SomeEndpointRequestPayload请求;
    @JsonProperty(value=“Antwort”)
    私有SomeEndpointResponsePayload successResponse;
    @JsonProperty(value=“Fehlerinformation”)
    私有SomeEndpointErrorPayload errorResponse;
    }
    
    这是可行的,但是。。。不,真的吗

在POXOs中实现XML
选项
而不创建虚假包装标记的好方法是什么