JAXB - Может ли XJC скомпилировать информацию о приложении в структуру класса?

У меня есть схема, которая читается несколькими различными приложениями для генерации форм; один из них использует JAXB/XJC для компиляции своей структуры классов. Схема содержит информацию о приложении для понятных имен полей, например:

<xs:element name="HomeAddress" type="xs:string">
  <xs:annotation>
    <xs:appinfo>Home address</xs:appinfo>
  </xs:annotation>
</xs:element>

Есть ли способ заставить XJC скомпилировать эту информацию?


person S. R. Rankin    schedule 16.09.2010    source источник
comment
В каком смысле? Каков желаемый результат в вашем примере?   -  person musiKk    schedule 16.09.2010
comment
На самом деле это не имеет значения, если я могу получить к нему доступ во время выполнения из Java. По аннотации (которую я мог захватить с отражением) или по статическому члену кажется самым простым.   -  person S. R. Rankin    schedule 16.09.2010


Ответы (2)


Вы можете использовать плагин Annotate для добавления произвольных аннотаций Java в ваши классы, производные от схемы. С помощью этого плагина вы можете управлять таким синтаксисом, как:

<xs:element name="HomeAddress" type="xs:string">
  <xs:annotation>
    <xs:appinfo>
      <ann:annotate xmlns:ann="http://annox.dev.java.net/com.acme.foo">
        <my:Label value="Home address"/>
      </ann:annotate>
    </xs:appinfo>
  </xs:annotation>
</xs:element>

Вы получите что-то вроде:

@Label("Home address") // FQCN is com.acme.foo.Label
public String getHomeAddress(...) {}
person lexicore    schedule 21.09.2010
comment
@lexicore: а если вы НЕ можете изменить схему, потому что она предоставлена ​​​​третьей стороной? - person Artem Oboturov; 06.04.2012
comment
@Artem Oboturov: Вы можете сделать то же самое с файлами привязки (*.xjb) без изменения схемы. - person lexicore; 06.04.2012
comment
@lexicore: да, ты прав. Я немного уточнил, о чем думал, в http://stackoverflow.com/questions/10041393/can-i-configure-xjc-compiler-to-consume-custom-xml-bindings-for-inline-customiza. Вы хотите попробовать это? - person Artem Oboturov; 06.04.2012

Я не знаю, как это сделать с помощью инструмента XJC, который поставляется с эталонной реализацией JAXB. Тем не менее, XJC позволяет вам создавать собственные плагины, которые могут позволить вам:

person bdoughan    schedule 17.09.2010