1

サードパーティがホストする Web サービスを利用しようとしています。wsimport を使用してアーティファクトと JAXB クラスを生成しようとすると、次のエラーが発生しました。名前空間を含め、両方の xsd ファイルの内容がまったく同じであることに注意してください (なぜそうするのかわからない)。ただし、最後の部分 servdocoid は異なります。wsdl とスキーマの構造は次のとおりです。

[ERROR] 'ElementX' is already defined
  line # of http:/....:port/wsdl/schema1.xsd?serviceoid=123&servdocoid=<b>5</b>

[ERROR] (related to above error) the first definition appears here
  line # of http:/....:port/wsdl/schema1.xsd?serviceoid=123&servdocoid=<b>1</b>

私は問題が何であるかを知っていると思います.wsimportで`-catalogを使用して回避策を見つけようとしていますが(それが正しいことかどうかはわかりません)、それでもエラーが発生します.

wsdl 構造は説明どおりであり、重要な部分のみを強調表示し、残りの wsdl 定義は無視しました

<wsdl:definitions targetNamespace="http:/xyz.com" xmlns:soap12="http:/schemas.xmlsoap.org/wsdl/soap12/ xmlns:wsdl="http:/schemas.xmlsoap.org/wsdl/" xmlns:xsd="http:/www.w3.org/2001/XMLSchema">
...
<!-- relevant -->
<xsd:schema targetNamespace="http://schema1" xmlns:wsdl="http:/schemas.xmlsoap.org/wsdl/" xmlns:xsd="http:/www.w3.org/2001/XMLSchema xmlns:soap12="http:/schemas.xmlsoap.org/wsdl/soap12/>
  <xsd:include schemaLocation="http:/domain.com:port/wsdl/schema1.xsd?serviceoid=123&servdocoid=1" />
</xsd:schema>
...............
</wsdl:definitions>

上記の wsdl で使用されるスキーマはネストされています。つまり、複数のスキーマをインポートし、複数のスキーマをインポートできます。チェーンと仮定します。

schema1.xsd

<xsd:schema elementFormDefault="qualified" targetNamespace="http:/schema1" xmlns:tns1="http:/schema1" xmlns:tns2="http:/schema2" xmlns:tns3="http:/schema3" xmlns:xsd="http:/www.w3.org/2001/XMLSchema">
....
<!-- relevant -->
<xsd:import namespace="http:/schema2" schemaLocation="http:/domain.com:port/wsdl/schema2.xsd?serviceoid=123&servdocoid=2" /> 
  <xsd:import namespace="http://schema3" schemaLocation="http:/domain.com:port/wsdl/schema3.xsd?serviceoid=123&servdocoid=3" /> 
...
</xsd:schema>

schema2.xsd

<xsd:schema elementFormDefault="qualified" targetNamespace="http:/schema2" xmlns:tns2="http:/schema2" xmlns:tns4="http://schema4"  xmlns:xsd="http:/www.w3.org/2001/XMLSchema">
...
<!-- relevant -->
 <xsd:import namespace="http:/schema4" schemaLocation="http:/domain.com:port/wsdl/schema4.xsd?serviceoid=123&servdocoid=4" /> 
...
</xsd:schema>

schema4.xsd

<xsd:schema elementFormDefault="qualified" targetNamespace="http:/schema4" xmlns:tns4="http:/schema2" xmlns:tns1="http:/schema1"  xmlns:xsd="http:/www.w3.org/2001/XMLSchema">
...
<!-- relevant -->
 <xsd:import namespace="http:/schema1" schemaLocation="http:/domain.com:port/wsdl/schema1.xsd?serviceoid=123&servdocoid=5" /> 
...
</xsd:schema>

したがって、ここで重要なスキーマは schema1.xsd と schema4.xsd です。どちらもまったく同じ内容ですが、リンクが異なります。そうは言っても、-catalog ファイルを使用して、すべての名前空間「http:/schema1」が常に 1 つのリンク http:/domain.com:port/wsdl/schema1.xsd?serviceoid に解決されることを wsimport に知らせようとしています。 =123&servdocoid=1 しかし、それでも動作しません。

4

0 に答える 0