Отредактируйте сгенерированную JAXB аннотацию с помощью annox и добавьте пространство имен в param

У меня есть следующая аннотация в сгенерированном классе 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>

1 ответ

Отказ от ответственности: я являюсь автором плагина Annotate.

Если вы попытаетесь добавить аннотацию, которая уже существует (то же местоположение, тот же класс аннотаций), это изменит существующую аннотацию, а не добавит вторую. Я не уверен на данный момент, переопределит ли это все атрибуты или объединит новые, но это определенно стоит попробовать.

Обновить:

Я перепроверил это. Действительно, он реализован (должен быть версии 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;

Итак, как я сказал, если вы добавите аннотацию в том же месте и в том же классе, они будут объединены.

Другие вопросы по тегам