Я пытаюсь сгенерировать классы из wsdl с помощью jaxws-maven-plugin
, но получаю несогласованные результаты. Проблема эта часть одного из xsds, где вы можете увидеть, что есть вложенные элементы с тем же именем:xpath переименовать один класс в сумасшедшую иерархию
<xs:complexType name="TrafficCountsReplyData" abstract="true">
<xs:sequence>
<xs:element name="effectiveTrafficWindow" type="common:DateTimeMinutePeriod" minOccurs="1" maxOccurs="1"/>
<xs:element name="flows" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="item" type="flow:Flow" minOccurs="0" maxOccurs="100"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="counts" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="item" minOccurs="0" maxOccurs="1440">
<xs:complexType>
<xs:sequence>
<xs:element name="key" type="common:DateTimeMinutePeriod" minOccurs="1"
maxOccurs="1"/>
<xs:element name="value" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="item" minOccurs="1" maxOccurs="3">
<xs:complexType>
<xs:sequence>
<xs:element name="key" type="flight:TrafficType"
minOccurs="1" maxOccurs="1"/>
<xs:element name="value" type="flow:Counts" minOccurs="1"
maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
Как вы можете видеть, там есть несколько элементов с именем item
. Это приводит к нескольким внутренним классам с одним и тем же именем внутри одного класса. TrafficCountsReplyData
Так что я пытаюсь собрать файл привязки, который переименовал бы один из них. Когда я пытаюсь переименовать в counts
элемент внешней item
с помощью этого:
<jaxb:bindings node="//xs:complexType[@name='TrafficCountsReplyData']//xs:element[@name='counts']//xs:element[@name='item']">
<jaxb:class name="Lulz"/>
</jaxb:bindings>
Я получаю следующее сообщение об ошибке:
[ERROR] оценка XPath из «// хз: ComplexType [@ имя =» TrafficCountsReplyData '] // xs: element [@ name =' counts '] // xs: element [@ name =' item '] "приводит к слишком большому (2) целевым узлам
Когда я создаю привязку xpath выражение для внутреннего типа:
<jaxb:bindings node="//xs:complexType[@name='TrafficCountsReplyData']//xs:element[@name='counts']//xs:element[@name='item']//xs:element[@name='value']//xs:element[@name='item']">
Затем я получаю следующее сообщение об ошибке:
java.lang.IllegalArgumentException: Illegal цикл наследования классов. Внешний класс Lulz не может быть подклассом из внутреннего класса: Lulz
Я не могу понять, как это сделать. Откуда происходит наследование? В элементе flows
есть еще один item
, но это не должно соответствовать Xpath. Без файла привязки я могу генерировать источники. У меня есть правильная схема в файле привязки, потому что я могу, например, переименовать класс, сгенерированный родительским элементом.
Если я правильно понял, вы добавили неназванные элементы в xpath, не так ли? Я пробовал это, как и вы, но проблема такая же ... слишком много целевых узлов. И если я положу туда полный путь к самому внутреннему «элементу», я все равно получаю «Незаконный цикл наследования классов».Я также попробовал одноразовый Xpath и создал запись привязки для всех вхождений «item», но это также не помогло. Я не уверен, что могу раскрыть XSD, но полная схема в любом случае имеет размер 3 МБ, и у меня есть другие файлы привязки, фиксирующие другие проблемы ... – NeplatnyUdaj