使用 annox 编辑 JAXB 生成的注释并在参数中添加命名空间

use*_*733 4 jaxb jaxb2 jaxb2-basics annox

我在 JAXB 生成的类中有以下注释

@XmlType(name = "MessageInfoType", propOrder = {
    "debugTraceBoolean",
    "clientHostnameString",
    "endUserIPAddress"
})
Run Code Online (Sandbox Code Playgroud)

需要使用自定义绑定在 JAXB 类中生成以下注释。即需要编辑上述注释并使用 annox 添加命名空间,如下所示类型。

        @XmlType(name = "MessageInfoType", propOrder = {
            "debugTraceBoolean",
            "clientHostnameString",
            "endUserIPAddress"
        }, namespace="urn:expedia:e3:data:messagetypes:defn:v4")
Run Code Online (Sandbox Code Playgroud)

我的xjb文件是:

  <jaxb:bindings schemaLocation="../../serviceDescription/atlantis/common/com.expedia.e3.data.messagetypes.v4.xsd">

    <jaxb:bindings node="//xs:complexType[@name='MessageInfoType']">
        <annox:annotate target="field">
            <annox:annotate annox:class="javax.xml.bind.annotation.XmlType" 
                   namespace="urn:expedia:e3:data:messagetypes:defn:v4"/>
        </annox:annotate>
    </jaxb:bindings>
  </jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)

lex*_*ore 5

隶属关系免责声明:我是Annotate Plugin的作者。

如果您尝试添加已存在的注释(相同位置、相同注释类),这将修改现有注释而不是添加第二个注释。我目前不确定这是否会覆盖所有属性或合并新属性,但这绝对值得尝试。

更新:

我已经重新检查过这一点。事实上,它已经实现了(应该是0.6.4版本,我刚刚用0.6.5-SNAPSHOT检查过)。

检查这个样本:

https://svn.java.net/svn/jaxb2-commons~svn/basics/trunk/tests/annotate/src/main/resources/bindings.xjb

这是绑定:

    <jaxb:bindings node="xs:complexType[@name='issueJIIB39CType']/xs:attribute[@name='test']">
        <annox:annotate target="field">
            <annox:annotate annox:class="javax.xml.bind.annotation.XmlAttribute" required="false"/>
        </annox:annotate>
    </jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)

如果存在此绑定,您将得到:

@XmlAttribute(name = "test", required = false)
protected String test;
Run Code Online (Sandbox Code Playgroud)

如果没有的话就会是这样的:

@XmlAttribute(name = "test", required = true)
protected String test;
Run Code Online (Sandbox Code Playgroud)

因此,正如我所说,如果您在同一位置和同一类中添加注释,它们将被合并。