2013-03-22 5 views
1

Я хочу добавить аннотацию к XML-файлу, предоставленному JAXB.Добавление аннотации к JAXB xml

У нас есть требование, когда я создам объекты с одинаковыми именами атрибутов и типами данных, но для них будут разные ключи JSON.

Имена ключей в JSON будут различаться на основе предоставленной аннотации. Эти аннотации представляют собой аннотации GSON, например: @SerializedName («имя ключа JSON, которое вы хотите»).

Я пытался получить некоторые входы от вопроса я отправил here

Но не мог получить какое-либо решение.

У кого-нибудь есть предложения?

Я добавлю некоторые XML-схемы для объяснения.

<xsd:complexType name="RouteType"> 
<xsd:attribute name="Pos" type="xsd:int" use="optional" default="1"/> 
<xsd:attribute name="Dir" type="DirType" use="required"/> 
</xsd:complexType> 

Теперь в приведенной выше схеме можно добавить аннотацию к атрибуту Pos?

+0

Что именно вы имеете в виду, когда говорите, добавляете аннотацию в JAXB XML? –

+1

Я думаю, что немного изменю вопрос, чтобы его было легко понять. – Sam

ответ

2

Я предполагаю, что вы спрашиваете, как заставить компилятор JAXB автоматически аннотировать создаваемые классы. Там это плагин JAXB для добавления аннотаций: http://confluence.highsource.org/display/J2B/Annotate+Plugin

Вы можете подключить его в generate-sources фазе Maven построить так:

<build> 
    <!-- snip --> 
    <plugins> 
     <plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <version>0.8.2</version> 
      <executions> 
       <execution> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>generate</goal> 
        </goals> 
        <configuration> 
         <schemaIncludes> 
          <include>path/to/your/schema.xsd</include> 
         </schemaIncludes> 
         <bindingIncludes> 
          <include>path/to/your/custom-bindings.xjb</include> <!-- if you choose to use a custom bindings file instead of inline annotations in the xsd --> 
         </bindingIncludes> 
         <forceRegenerate>true</forceRegenerate> 
         <extension>true</extension> 
         <episode>false</episode> 
         <args> 
          <arg>-Xannotate</arg> 
         </args> 
         <plugins> 
          <plugin> 
           <groupId>org.jvnet.jaxb2_commons</groupId> 
           <artifactId>jaxb2-basics-annotate</artifactId> 
           <version>0.6.4</version> 
          </plugin> 
         </plugins> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Если выше плагин не делает именно то, что вы хотите (я думаю, что это должно выглядеть, оно выглядит довольно гибким), не должно быть слишком сложно свернуть собственную модификацию (я сделал это раньше, чтобы добавить конструкторы копирования к сгенерированным классам).

Смежные вопросы