2016-01-10 4 views
0

Я попытался преобразовать XSD в классы JAXB, используя плагин mave-jaxb2 и jaxb2-basics, упрощающий плагин.jaxb2 упрощает элементы плагина, не упрощается

Конфигурация в pom.xml доступна в этом post

sample.xsd (сложный тип выбора)

<xs:complexType name="doclist"> 
     <xs:sequence> 
      <xs:choice minOccurs="0" maxOccurs="unbounded"> 
       <xs:element name="document1" type="type1"> 
        <xs:annotation> 
         <xs:appinfo> 
          <simplify:as-reference-property/> 
         </xs:appinfo> 
        </xs:annotation> 
       </xs:element> 
       <xs:element name="document2" type="type2"> 
       </xs:element> 
      </xs:choice> 
     </xs:sequence> 
     <xs:attribute name="heading" type="xs:string" /> 
    </xs:complexType> 

Однако сгенерированные классы JAXB имеют aOrB ссылки.

@XmlElements({ 
     @XmlElement(name = "document1", type = Type1.class), 
     @XmlElement(name = "document2", type = Type2.class) 
    }) 
    protected List<Object> document1OrDocument2; 

ответ

1

У вас есть elements собственность, так что вы должны разместить аннотацию на xs:choice, а не на xs:element. См. the documentation.

И вы, скорее всего, захотите использовать <simplify:as-element-property/>.

+0

Спасибо. Может ли упростить работу, если у меня одинаковые типы для нескольких элементов? например, '' – ulab

+0

@ulab Это еще один вопрос. – lexicore

+0

штраф :). Я создал другой [вопрос] (http://stackoverflow.com/questions/34860485/jaxb2-simplify-plugin-for-xschoice-having-same-types) – ulab

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