私は(誰かのマシンからは動くはずです)このコマンドを実行することにより、wsimport
を使用してJavaコードにWSDLファイルをオンにしようとしている:'lang'が既に定義されている場合、WSDLからJavaファイルを生成するには?
wsimport https://webservices-uatprod.dhisco.com/OTAHotelDescriptiveInfo/web_services?WSDL -J-Djavax.xml.accessExternalDTD=all -J-Djavax.xml.accessExternalSchema=all -B-XautoNameResolution -Xnocompile
しかし、私はこのエラーを取得しておいてください。
[ERROR] 'lang' is already defined
line 93 of http://www.w3.org/2001/03/xml.xsd
[ERROR] (related to above error) the first definition appears here
line 43 of http://www.w3.org/2001/xml.xsd
[ERROR] 'space' is already defined
line 102 of http://www.w3.org/2001/03/xml.xsd
[ERROR] (related to above error) the first definition appears here
line 89 of http://www.w3.org/2001/xml.xsd
[ERROR] 'base' is already defined
line 109 of http://www.w3.org/2001/03/xml.xsd
[ERROR] (related to above error) the first definition appears here
line 113 of http://www.w3.org/2001/xml.xsd
[ERROR] 'specialAttrs' is already defined
line 117 of http://www.w3.org/2001/03/xml.xsd
[ERROR] (related to above error) the first definition appears here
line 157 of http://www.w3.org/2001/xml.xsd
私はこれを試して解決策を見つけるために数時間を過ごしました。私は、-b binding.xml
フラグを持つバインディングファイルを指定する必要があると確信しています。
しかし、私はそのバインディングファイルを作成する方法を理解するのに非常に苦労しています。ここで私が試みられてきたものだ:
binding.xmlこれに続いて
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3c.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/03/xml.xsd"
jaxb:version="2.0">
<jaxb:bindings schemaLocation="http://www.w3.org/2001/xml.xsd">
<jaxb:bindings node="//xs:attribute[@name='lang']">
<jaxb:property name="langAttribute"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
場所で、私はによって結合ファイルを実行してみてください:
wsimport https://webservices-uatprod.dhisco.com/OTAHotelDescriptiveInfo/web_services?WSDL -J-Djavax.xml.accessExternalDTD=all -J-Djavax.xml.accessExternalSchema=all -B-XautoNameResolution -Xnocompile -b binding.xml
そして今、私が取得します:
[ERROR] XPath evaluation of "//xs:attribute[@name='lang']" results in empty target node
line 6 of file:/Users/name/git/foo/bar/src/main/resources/wsdl/binding.xml
私はバインディングファイルのXパス...私は、すべての要素の属性を 'lang'から別のものに変更する必要があると考えていますが、実際にはそれを理解するのに苦労しています。
ありがとうございました!
ソリューションのアップデート: 私はローカルにスキーマをダウンロードすることにより、このエラーを過ぎました、そしてschemaLocation="http://www.w3.org/2001/03/xml.xsd"
とschemaLocation="http://www.w3.org/2001/xml.xsd"
への参照があった場所に、私は、ファイルシステム上のファイルの私のローカルコピーを指すようにXMLを編集しました。
I.e.このように、これらのファイルへの参照があった各*の.xsdファイルを開いて、何かから各行を更新:
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
この目的のために:その後
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="./xml.xsd"/>
を、生成することができました上記のwsimport
構文を使用するJavaクラス(小さなバインディングファイルが1つ必要でしたが、これはベンダー定義のクラスに関連していました)。
スキーマとxmlファイルをローカルでダウンロードしようとしましたが、wsimportにインターネットへ行く代わりにローカルコピーを探す方法がわかりません。私が 'xsd.xml'のコピーをローカルに持っていれば、wsimportにインターネット上で見つけられるものの代わりにそれを使うように指示する方法はありますか? – Cuga
カタログファイルを使用します。私はすぐに答えを更新します。 – lexicore
私は 'maven-jaxb2'プラグインと' wsimport'の両方が 'xjc'を呼び出してこの作業をたくさんやっていると確信しています。 – Cuga