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>
Вы можете настроить генерацию с помощью внешнего файла привязок.
Вы можете пройти пример здесь.