3

Apache CXF 2.7.6 を使用しwsdl2javaていますが、ツールがパブリック カタログ エントリを無視するか、見つけられないようです。特に<xs:import>、XSD ファイルの 1 つに次のものがあります。

<xs:import namespace="http://www.ivoa.net/xml/STC/STCcoords/v1.10"/>

上記は、カタログ ファイル エントリでは適切に解決できません。

<public publicId="http://www.ivoa.net/xml/STC/STCcoords/v1.10" uri="STCcoords-v1.10.xsd"/>

属性<xs:import>を追加してを変更した場合、つまり次のように変更します。schemaLocation

<xs:import namespace="http://www.ivoa.net/xml/STC/STCcoords/v1.10" schemaLocation="http://www.ivoa.net/xml/STC/STCcoords/v1.10/>

ファイルは解決されますが、提供された XSD を編集する必要がないため、これは必要ないはずであると理解しています。

OASIS XML 形式でも TR9401 形式でも動作は同じです。

4

1 に答える 1

4

Apache CXFユーザーのメーリング リストから得た回答によると、XML Schema 仕様ではこの点は実装に委ねられているため、バグとは見なされません。

こちらのスレッド(投稿は 2013 年 9 月 26 日の日付で、2 ページ目にあり、そのページへの直接リンクを提供できないようです)。関連する結論はここにあります。私は引用します:

これに関する私の考え:

1) スキーマ仕様によると、schemaLocation ヒントが指定されていない場合、必要に応じて解決方法を見つけるのはアプリケーション次第です。したがって、私はこれを「バグ」とは考えていません。具体的には、提供された情報を使用するだけであり、「コンパイル ユニット」(別名: wsdl) の一部です。

2) 個人的には、schemaLocation を提供しないのはかなりばかげていると思うので、追加することを強く強くお勧めします。指定されていないのを見たのは、同じ wsdl に埋め込まれているスキーマをインポートするときだけです (そのため、場所はありません)。
仕様で「アプリケーションに応じて」のようなものを見るたびに、それは相互運用性の悪夢です。指定するだけです。

3) つまり、根本的な問題は XmlSchema の SchemaBuilder クラスにあります。schemaLocation がない場合は、作業中のコンパイル ユニットの一部であると見なされ、処理が続行されます。何も解決しようとしない。パッチか何かを追求したい場合は、SchemaBuilder.java の 680 あたりになります。しかし、それを変更する場合でも、CXF 側からのサポートがさらに必要になる場合があります。これは、CXF が既に知っている名前空間を事前設定して、インターネットに送信されないようにするためです。よくわかりません。

したがって、次のことが確認されています。

  • Oracle Java 7wsimportに同梱されているデフォルトのツールは、 schemaLocation属性がなくてもカタログを使用してimportステートメントを解決します。
  • Apache CXF 2.7.6wsdl2javaツールは、 schemaLocation属性のないimportステートメントを解決するためにカタログを使用しません。
  • Apache CXF コミュニティはこれをバグとは見なしていません。
于 2013-10-01T21:17:09.143 に答える