在疯狂的层次结构中重命名单个 class 的 xpath
xpath to rename single class in crazy hierarchy
我正在尝试使用 jaxws-maven-plugin
从 wsdl 生成 classes,但我得到了无法编译的结果。问题是其中一个 xsds 的这一部分,您可以在其中看到具有相同名称的嵌套元素:
<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
的元素。这导致在单个 class TrafficCountsReplyData
中出现多个具有相同名称的内部 classes
所以我正在尝试整理一个绑定文件,该文件将重命名其中一个。当我尝试使用以下命令重命名 counts
元素中的外部 item
时:
<jaxb:bindings node="//xs:complexType[@name='TrafficCountsReplyData']//xs:element[@name='counts']//xs:element[@name='item']">
<jaxb:class name="Lulz"/>
</jaxb:bindings>
我收到以下错误:
[错误] "//xs:complexType[@name='TrafficCountsReplyData']//xs:element[@name='counts']//xs 的 XPath 求值: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: 非法 class 继承循环。外部 class Lulz 不能从内部 class 子class: Lulz
我不知道该怎么做。传承从何而来? flows
元素中还有另一个 item
,但 Xpath 不应匹配它。没有绑定文件,我可以生成源代码。我在绑定文件中有正确的模式,因为我可以重命名由父元素生成的 class。
嗯
我有一个类似的问题,但有属性..
我没有完整的 xsd 来检查,但如果您想将 OUTER 项目标签更改为其他标签,请尝试这个:
<?xml version="1.0"?>
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jxb:extensionBindingPrefixes="xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="../yourlocation/yourschema.xsd" version="1.0">
<!-- Customise the package name -->
<jxb:schemaBindings>
<jxb:package name="whatyouwant.something"/>
</jxb:schemaBindings>
<!-- rename the value element -->
<jxb:bindings node="//xs:complexType[@name='TrafficCountsReplyData']//xs:sequence//xs:element[@name='counts']//xs:complexType//xs:sequence//xs:element[@name='item']">
<jaxb:class name="Lulz"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
如果这似乎不起作用,如果你能透露 xml 我应该可以帮助你进一步(休假到星期一以防万一),但考虑到你给错了 "path", 在你的 xpath 表达式中跳出一些 "subelement"。
让我知道。
我在这里找到了解决方案:JAXB Customizations With a Poorly Formed WSDL
我不得不在 Xpath 的末尾添加 /xs:complexType
。我猜这是因为 class 的根实际上是 complexType 而不是包含 xs:element。所以它是这样的:
<jaxb:bindings node="//xs:complexType[@name='TrafficCountsReplyData']//xs:element[@name='counts']/xs:complexType/xs:sequence/xs:element[@name='item']/xs:complexType">
<jaxb:class name="Lulz"/>
</jaxb:bindings>
现在我可以生成 classes 并编译它们。
我正在尝试使用 jaxws-maven-plugin
从 wsdl 生成 classes,但我得到了无法编译的结果。问题是其中一个 xsds 的这一部分,您可以在其中看到具有相同名称的嵌套元素:
<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
的元素。这导致在单个 class 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:complexType[@name='TrafficCountsReplyData']//xs:element[@name='counts']//xs 的 XPath 求值: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: 非法 class 继承循环。外部 class Lulz 不能从内部 class 子class: Lulz
我不知道该怎么做。传承从何而来? flows
元素中还有另一个 item
,但 Xpath 不应匹配它。没有绑定文件,我可以生成源代码。我在绑定文件中有正确的模式,因为我可以重命名由父元素生成的 class。
嗯 我有一个类似的问题,但有属性.. 我没有完整的 xsd 来检查,但如果您想将 OUTER 项目标签更改为其他标签,请尝试这个:
<?xml version="1.0"?>
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jxb:extensionBindingPrefixes="xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="../yourlocation/yourschema.xsd" version="1.0">
<!-- Customise the package name -->
<jxb:schemaBindings>
<jxb:package name="whatyouwant.something"/>
</jxb:schemaBindings>
<!-- rename the value element -->
<jxb:bindings node="//xs:complexType[@name='TrafficCountsReplyData']//xs:sequence//xs:element[@name='counts']//xs:complexType//xs:sequence//xs:element[@name='item']">
<jaxb:class name="Lulz"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
如果这似乎不起作用,如果你能透露 xml 我应该可以帮助你进一步(休假到星期一以防万一),但考虑到你给错了 "path", 在你的 xpath 表达式中跳出一些 "subelement"。 让我知道。
我在这里找到了解决方案:JAXB Customizations With a Poorly Formed WSDL
我不得不在 Xpath 的末尾添加 /xs:complexType
。我猜这是因为 class 的根实际上是 complexType 而不是包含 xs:element。所以它是这样的:
<jaxb:bindings node="//xs:complexType[@name='TrafficCountsReplyData']//xs:element[@name='counts']/xs:complexType/xs:sequence/xs:element[@name='item']/xs:complexType">
<jaxb:class name="Lulz"/>
</jaxb:bindings>
现在我可以生成 classes 并编译它们。