4

JAXBで生成されたクラスに次の注釈があります

@XmlType(name = "MessageInfoType", propOrder = {
    "debugTraceBoolean",
    "clientHostnameString",
    "endUserIPAddress"
})

カスタム バインディングを使用して JAXB クラスで次の注釈を生成する必要があります。つまり、上記の注釈を編集し、以下の型として annox を使用して名前空間を追加する必要があります。

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

私の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>
4

1 に答える 1

5

所属に関する免責事項: 私はAnnotate Pluginの作成者です。

既に存在するアノテーション (同じ場所、同じアノテーション クラス) を追加しようとすると、2 つ目のアノテーションが追加されるのではなく、既存のアノテーションが変更されます。これがすべての属性を上書きするのか、それとも新しい属性をマージするのかは現時点ではわかりませんが、試してみる価値は間違いありません。

アップデート:

これを再確認しました。実際、実装されています (バージョン 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>

このバインディングが存在する場合、次のようになります。

@XmlAttribute(name = "test", required = false)
protected String test;

そうでない場合は、次のようになります。

@XmlAttribute(name = "test", required = true)
protected String test;

ですから、先ほど言ったように、まったく同じ場所でまったく同じクラスにアノテーションを追加すると、それらはマージされます。

于 2012-08-31T06:08:35.287 に答える