0

我们有一个要求,XML 标记与 java POJO 属性不相似。

我们需要一种解决方案来将 XML 标记映射到具有不同名称的 POJO。

这是相同的 XML,

<RES>
     <TAG1>
       value
     </TAG1>
</RES>

这是 POJO 类,

public class Response {
    protected String tag1Value;
...}

这里我想映射到 POJO 中的 tag1Value。

我发现以下语法可用于将 XML 映射到 java 属性。

public class Response {
     @XmlElement(name="TAG1")
    protected String tag1Value;
...}

但我想知道如何在 XSD 中进行配置,以便在 XMLElement 中生成带有 name 属性的 POJO。

使用下面的 XSD 如何一起指定 java 属性名称和 XML nae,

<xsd:element name="tag1Value" minOccurs="0" maxOccurs="1">

帮助表示赞赏...

4

2 回答 2

0

这就是绑定的用途。

创建一个名为bindings.xjbxjb按约定是文件扩展名)的文件。在此文件中,您可以自定义代码生成的某些方面。例如,您可以使用jaxb:property在生成的类中指定属性的名称:

<jaxb:bindings version="1.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    jaxb:extensionBindingPrefixes="xjc">

    <jaxb:bindings 
        schemaLocation="mySchema.xsd" 
        node="/xs:schema">

        <!-- node is the XPath leading to the element you want to customize -->
        <jaxb:bindings node="xs:complexType[@name='SomeComplexType']/xs:sequence/xs:element[@name='TAG1']">
            <jaxb:property name="tag1Value"/>
        </jaxb:bindings>
    </jaxb:bindings>

</jaxb:bindings>

xjc mySchema.xsd -b bindings.xjb您可以在编译期间使用 Maven 插件或 Ant 任务(无论您使用什么)的配置选项或使用该配置选项来提供此文件。

这将生成名为的属性,该属性tag1Value将使用@XmlElement(name="TAG1").

于 2018-02-15T16:11:31.827 回答
0

您可以通过为您指定的模式自定义 jaxb 绑定来做到这一点:

(我正在假设您的 xsd 外观,但如果我错了,您可以调整目标节点的路径)

<jxb:bindings schemaLocation="../xsd/your_schema.xsd">
        <jxb:bindings node="//xs:element[@name='Response']//xs:complexType//xs:all//xs:element[@name='tag1Value']">
            <annox:annotate target="field">
                <annox:annotate annox:class="javax.xml.bind.annotation.XmlElement" name="TAG1" />
            </annox:annotate>
        </jxb:bindings>
</jxb:bindings>
于 2018-02-15T13:33:12.083 回答