1

私が使用している wsdl の xsd は、「ドット スラッシュ」(./) で始まるパスで参照されます。

<xsd:schema>
    <xsd:import namespace="urn:my.name.space.be" schemaLocation="http://fictive.url.be:11001/path/to/wsdl/my-service?XSD=./xsd/my-service.xsd"/>
</xsd:schema>

パスは有効です。ブラウザで xsd にアクセスできます。たとえば、Soap UI でも問題なく動作します。しかし、Jdeveloper でプロキシを生成しようとすると、「WebServiceException: : Error creating model from wsdl: 'ExampleType' is already defined」というメッセージが表示されます。

「ドット スラッシュ」( XSD=xsd/my-service.xsd) を削除すると、例外は発生しなくなり、すべて問題ありません。

これはバグですか?なぜこれが起こるのですか?必ずしも wsdl を変更することなく、これを回避する方法はありますか?

ありがとう。

4

1 に答える 1

1

これが発生する理由は、XMLスキーマセットがJDeveloperツールによってどのようにまとめられているかに関係しています。'ExampleType' is already defined'.次の2つのうちの1つを意味します。

  • 同じXSD定義は、異なるベースURIを使用して2回以上ExampleTypeロードされます。異なる「文字列」表現ですが、サーバーで逆参照されると、同じリソースを指します。

  • ExampleType2つ以上の(異なる)XSD「場所」で定義されます。WSDLtypes/ schemaセクション、および/または外部XSDファイル内にある可能性があります。

URLを変更すると、URLが無効になるか(余分な参照がなくなります)、JDeveloperのURI比較が正しく実行できるようになります。

診断するには、最初にどのリソースがどこからダウンロードされているかを把握する必要があります。

JDeveloperおよびその他のツールを実行している間、HTTPデバッガを使用します(たとえば、プロキシとしてtcpmonを使用し、それを介してトラフィックを監視します)。トレースを比較し、各ツールが解決しようとしているURLを探します。

GETヘッダー値を比較して、ツール間の違いを確認します。次に、ダウンロードしたコンテンツを確認します。それはあなたに次に何をすべきかについての良い考えを与えるはずです。それでも理解できない場合は、質問を追加情報で更新してください。

于 2012-10-22T19:26:23.007 に答える