Как переопределить имя по умолчанию для JAXB с помощью внешнего файла привязки?

У меня есть элемент, который выглядит примерно так.

 <xsd:element name="container">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="navmap"/>
        <xsd:element ref="keymap" />
        <xsd:element ref="container" />
        <xsd:element ref="ad" />
        <xsd:element ref="button" />
        <xsd:element ref="checkbox" />        
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>

Вот код по умолчанию, который создается для этого элемента.

@XmlElements({
    @XmlElement(name = "navmap", type = Navmap.class),
    @XmlElement(name = "keymap", type = Keymap.class),
    @XmlElement(name = "container", type = Container.class),
    @XmlElement(name = "ad", type = Ad.class),
    @XmlElement(name = "button", type = Button.class),
    @XmlElement(name = "checkbox", type = Checkbox.class),
})
protected List<Object> navmapOrKeymapOrContainer;

Мой вопрос: Что мне нужно поместить в мой .xjb файл привязок, чтобы изменить сгенерированное по умолчанию имя с navmapOrKeymapOrContainer на что-то другое, например children?


person Community    schedule 05.08.2011    source источник


Ответы (1)


Пример:

<xs:complexType>
  <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:annotation>
      <xs:appinfo>
        <jaxb:property name="Shapes"/>
      </xs:appinfo>
    </xs:annotation>
    <xs:element name="Rectangle" type="Rectangle"/>
    <xs:element name="Square" type="Square"/>
    <xs:element name="Circle" type="Circle"/>
  </xs:choice>
</xs:complexType>

Адаптируйте это в своем файле привязки, и все будет в порядке. См. здесь для справки.

Листинг 11 раскрывает секрет:

<jxb:bindings version="1.0" 
  xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
  jxb:extensionBindingPrefixes="xjc">
<jxb:bindings schemaLocation="po4.xsd" node="/xs:schema">
  <jxb:globalBindings>
    <xjc:superClass name="com.syh.
    <xjc:serializable uid="12343"/>
  </jxb:globalBindings>
  <jxb:bindings node="//xs:element[@name='Widgets']//xs:complexType//xs:choice">
      <jxb:property name="Shapes"/>
  </jxb:bindings>
</jxb:bindings>
person Michael-O    schedule 05.08.2011
comment
Я не могу изменять файлы .xsd, которые они получают от поставщика, и я не контролирую их, я не хочу объединять изменения каждый раз, когда что-то меняется на их конце, когда я повторно генерирую привязки. - person ; 05.08.2011
comment
Вот почему я скопировал листинг 11. Этот фрагмент находится в вашем файле .binding. - person Michael-O; 06.08.2011