変更できない 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: 同じフィールドを 2 回作成しようとしています: subtotal1
この問題の解決策を調査する際に、「-B-XautoNameResolution」オプションを指定して wsimport を実行しようとしましたが、効果がありませんでした。他に考えられる唯一の解決策は、外部バインディング ファイルを使用して wsimport に変数の名前を明示的に伝えることです。しかし、私もそれを機能させるのに苦労しています。重複した変数の 1 つだけに使用しようとしているバインディング ファイルを次に示します。
<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 クラスを生成させる方法についての提案はありますか?