我试图使用jaxws-maven-plugin
WSDL生成类重命名一个类,但我得到不可编译的结果。问题是XSD文件,在这里你可以看到有相同名称的嵌套的元素之一,这部分: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>
我得到以下错误:
[错误]的“// XS XPath计算:复杂类型[@名称=” TrafficCountsReplyData '] //的xs:元素[@名称=' 计数 '] //的xs:元素[@名称=' 项目']”导致太多(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异常:非法类继承循环。外部类Lulz可能无法从内部类的子类:Lulz
我无法弄清楚如何使这项工作。遗产从哪里来?还有一个item
在flows
元素,但是这不应该的XPath匹配。没有绑定文件,我可以生成源代码。我在绑定文件中有正确的模式,因为我可以例如重命名由父元素生成的类。
如果我正确地得到它,你已经添加了未命名的元素到xpath,对吗?我已经尝试过,现在就像你所建议的那样,但问题是一样的......太多的目标节点。如果我在那里放置了最内层'item'的完整路径,我仍然会得到'非法类继承循环'。我也尝试过使用单斜杠Xpath并为所有出现的“item”创建绑定条目,但它也没有帮助。我不确定我可以透露XSD,但是无论如何,完整的模式大约有3MB大小,而我有其他绑定文件可以解决其他问题... – NeplatnyUdaj 2015-03-13 17:38:16