我正在尝试对我无法修改的 WSDL 文件运行 wsimport。WSDL 的一部分如下所示:
<xsd:complexType name="Bapiitemex">
<xsd:sequence>
<xsd:element name="ItmNumber" type="n0:numeric6"/>
<xsd:element name="PoItmNo" type="n0:char6"/>
<xsd:element name="Material" type="n0:char18"/>
<xsd:element name="MatEntrd" type="n0:char18"/>
<xsd:element name="ShortText" type="n0:char40"/>
<xsd:element name="NetValue" type="n0:numeric15"/>
<xsd:element name="Currency" type="n0:cuky5"/>
<xsd:element name="Subtotal1" type="n0:numeric15"/>
<xsd:element name="Subtotal2" type="n0:numeric15"/>
<xsd:element name="Subtotal3" type="n0:numeric15"/>
<xsd:element name="Subtotal4" type="n0:numeric15"/>
<xsd:element name="Subtotal5" type="n0:numeric15"/>
<xsd:element name="Subtotal6" type="n0:numeric15"/>
<xsd:element name="SUBTOTAL1" type="n0:decimal23.4"/>
<xsd:element name="SUBTOTAL2" type="n0:decimal23.4"/>
<xsd:element name="SUBTOTAL3" type="n0:decimal23.4"/>
<xsd:element name="SUBTOTAL4" type="n0:decimal23.4"/>
<xsd:element name="SUBTOTAL5" type="n0:decimal23.4"/>
<xsd:element name="SUBTOTAL6" type="n0:decimal23.4"/>
</xsd:sequence>
</xsd:complexType>
wsimport 不满意,因为包含多个仅在大小写上有所不同的元素('Subtotal1' 与 'SUBTOTAL1' 等)。具体错误是
java.lang.IllegalArgumentException:尝试创建相同的字段两次:subtotal1
在研究此问题的解决方案时,我尝试使用“-B-XautoNameResolution”选项运行 wsimport,但没有效果。似乎唯一其他可能的解决方案是使用外部绑定文件来明确告诉 wsimport 如何命名变量。但是,我也很难做到这一点。这是我试图仅用于其中一个重复变量的绑定文件:
<jxb:bindings version="1.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<jxb:bindings node="//xsd:complexType[@name='Bapiitemex']//xsd:element[@name='Subtotal1']">
<jxb:property name="testSubtotal1"/>
</jxb:bindings>
尽我所能,wsimport 似乎不明白我要它做什么。我对“节点”属性使用的 XPath 语法不满意,返回错误:
“//xsd:complexType[@name='Bapiitemex']//xsd:element[@name='Subtotal1']”的 XPath 评估导致空目标节点
关于如何说服 wsimport 为我生成 Java 类的建议?