JAXB генерирует список<Jaxbelement> вместо полей

Я пытаюсь сгенерировать класс с помощью плагина jaxb maven из следующего wsdl:

<xs:complexType name="ctpLeerling">
<xs:sequence>
  <xs:element minOccurs="0" name="achternaam" type="xs:string"/>
  <xs:element minOccurs="0" name="voorvoegsel" type="xs:string"/>
  <xs:element minOccurs="0" name="voorletters-1" type="xs:string"/>
  <xs:element minOccurs="0" name="roepnaam" type="xs:string"/>
  <xs:element minOccurs="0" name="roepnaam" type="xs:string"/>
  <xs:element name="geboortedatum" type="xs:date"/>
  <xs:element minOccurs="0" name="geslacht" type="xs:string"/>
  <xs:element name="jaargroep" type="tns:ctpVocabulaireGebondenVeld"/>
  <xs:element minOccurs="0" name="emailadres" type="xs:string"/>
  <xs:element minOccurs="0" name="fotourl" type="xs:string"/>
  <xs:element minOccurs="0" name="groep">
    <xs:complexType>
      <xs:sequence/>
      <xs:attribute name="key" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:element minOccurs="0" name="subgroepen">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="groep">
          <xs:complexType>
            <xs:sequence/>
            <xs:attribute name="key" type="xs:string"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element minOccurs="0" name="mutatiedatum" type="xs:dateTime"/>
</xs:sequence>
<xs:attribute name="key" type="xs:string" use="required"/>

Это дает мне класс, который имеет следующие поля:

protected List<JAXBElement<?>> content;
@XmlAttribute(name = "key", required = true)
protected String key;

Как я могу сгенерировать поля свойств wsdl вместо списка с JAXBElements? Заранее спасибо!

Изменить: Извините, я забыл упомянуть, что я не могу редактировать файл wsdl!

2 ответа

Вы получаете List<JAXBElement> потому что у вас есть два элемента, определенных в вашем sequence с тем же именем.

<xs:element minOccurs="0" name="roepnaam" type="xs:string"/>
<xs:element minOccurs="0" name="roepnaam" type="xs:string"/>

Элемент был бы лучше определен как:

<xs:element minOccurs="0" maxOccurs="2" name="roepnaam" type="xs:string"/>

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

<jxb:bindings schemaLocation="yourSchema.xsd">
    <jxb:bindings node="//xs:complexType[@name='ctpLeerling']">
        <jxb:class ref="com.example.YourOwnClass"/>
    </jxb:bindings>
</jxb:bindings>

Вы можете настроить генерацию с помощью внешнего файла привязок.

Вы можете пройти пример здесь.

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