微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 JAXB 编组 java.lang.Object 时,如何编写正确命名的 XML 标记而不是具有“xsi:type”属性的节点?

如何解决使用 JAXB 编组 java.lang.Object 时,如何编写正确命名的 XML 标记而不是具有“xsi:type”属性的节点?

这是我整理“请求”对象的 XML 文件(Jaxb2Marshaller,Spring Boot 2.4.8):

<request>
    <payload xsi:type="ns1:SimpleRequestInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://example.com/Types">
        <ns1:senderId>cc65c8bfa5b393d70224b496d4fd4d19581a2ba6dcfa6d243a17c6fa7e641db7</ns1:senderId>
    </payload>
</request>

我想得到这样的东西:

<request>
    <payload>
        <simpleRequestInfo>
            <ns1:senderId>cc65c8bfa5b393d70224b496d4fd4d19581a2ba6dcfa6d243a17c6fa7e641db7</ns1:senderId>
        </simpleRequestInfo>
    </payload>
</request>

如何做到这一点?

这是从 Web 服务接收的 XSD 文件(为了清晰起见而简化)。

<xsd:schema targetNamespace="http://example.com/Types" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:complexType name="Request">
        <xsd:sequence>
            <xsd:element minOccurs="0" name="payload" type="xsd:anyType"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    
    <xsd:complexType name="SimpleRequestInfo">
        <xsd:sequence>
            <xsd:element name="senderId" type="xsd:string"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    
    <xsd:complexType name="ExtendedRequestInfo">
        <xsd:sequence>
            <xsd:element name="region" type="xsd:string"></xsd:element>
            <xsd:element name="name" type="xsd:string"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

下面列出了使用 xjc 命令行工具 (v2.3.4) 生成的 Java 类:

@XmlAccessorType(XmlAccesstype.FIELD)
@XmlType(name = "Request",propOrder = {"payload"})
public class Request {
    protected Object payload; // getters & and setters are omitted
}   

@XmlRootElement
@XmlType(name = "SimpleRequestInfo",propOrder = {"senderId"})
public class SimpleRequestInfo {
    protected String senderId; // getters & and setters are omitted
}

@XmlRootElement
@XmlType(name = "ExtendedRequestInfo",propOrder = {"region","name"})
public class ExtendedRequestInfo {
    protected String region;
    protected String name; // getters & and setters are omitted
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。