2016-08-01 5 views
0

私は(誰かのマシンからは動くはずです)このコマンドを実行することにより、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つ必要でしたが、これはベンダー定義のクラスに関連していました)。

答えて

0

あなたはXML名前空間http://www.w3.org/2001/03/xml.xsdにごxs接頭辞をバインドしましたが、それはXMLスキーマの名前空間http://www.w3.org/2001/XMLSchemaにバインドする必要があります:あなたが直面するだろう

xmlns:xs="http://www.w3.org/2001/XMLSchema" 

もう一つの問題は、あなたのスキーマがxml.xsdに対処するように見えるということです2つの異なる場所:http://www.w3.org/2001/xml.xsdおよびhttp://www.w3.org/2001/03/xml.xsdを介して。それはあなたに多くの重複を与えるでしょう。

REWRITE_SYSTEM "http://www.w3.org/2001/03/" "http://www.w3.org/2001/" 

しかし、私はこれが動作するかわからない(そして-catalogで使用すること。):あなたのようなカタログを経由して、それらを解決しようとすることができます。同様の状況では、統一されたスキーマの場所を使用するためにそれらをコンパイルしてパッチするために必要なスキーマの完全なローカルコピーを作成しました。

I tried downloading the schemas and xml files locally, but am not sure how to tell wsimport to look for the local copies instead of going out to the internet. If I have a copy of xsd.xml locally... is there a way to tell wsimport to use that instead of any it may find on the internet?

私はwsimport程度正確にはわかりませんが、一般的に、それはカタログで行われます。ディレクトリw3chttp://www.w3.orgのスキーマをダウンロードしたとします。

REWRITE_SYSTEM "http://www.w3.org/" "w3c/" 

カタログファイルはwsimport -catalog mycatalog.cat ...でご利用いただけます。 wsimportまたは基礎となるスキーマコンパイラxjchttp://www.w3.org/2001/xml.xsdスキーマをw3c/2001/xml.xsdから取得する必要があります。

しかし、私はwsimportでそれを試したことはありません、私はちょうどmaven-jaxb2-pluginでそれを使用しています。

+0

スキーマとxmlファイルをローカルでダウンロードしようとしましたが、wsimportにインターネットへ行く代わりにローカルコピーを探す方法がわかりません。私が 'xsd.xml'のコピーをローカルに持っていれば、wsimportにインターネット上で見つけられるものの代わりにそれを使うように指示する方法はありますか? – Cuga

+0

カタログファイルを使用します。私はすぐに答えを更新します。 – lexicore

+0

私は 'maven-jaxb2'プラグインと' wsimport'の両方が 'xjc'を呼び出してこの作業をたくさんやっていると確信しています。 – Cuga

関連する問題