wsimportコマンド実行時に出る「src-resolve: Cannot resolve the name…」という警告について
JAX-WSのwsimportコマンドを使って、WSDLからJavaのソースコード、及びクラスを生成した際に、以下のような警告メッセージが出力された(この警告はwsimportコマンドをJDK6を利用して実行すると出力されるのだが、JDK5の場合出力されない)。
[WARNING] src-resolve: Cannot resolve the name 'ns1:xxxxx' to a(n) 'type definition' component. line 100 of http://localhost/Boo?wsdl#types?schema4 generating code... compiling code...
WSDLを調べてみた結果、どうもXML Schemaを使って「メッセージのフォーマットを定義する際に使用する型」を定義している部分(types要素)で、"ns1:xxxxx"という型を定義する前に使用している事が原因の模様(例は以下)。
<wsdl:types> <xs:complexType name="AAA"> <xs:sequence> <xs:element minOccurs="0" name="bbb" type="ns1:xxxxx"/> </xs:sequence> </xs:complexType> (snip) <xs:simpleType name"xxxxx"> (snip) </xs:simpleType> (snip) </wsdl:types>
上記は文法としては問題ないと思われるし、警告は出るものの問題なくJavaのソースコード、及びクラスが生成出来ているため、JDK6に付属するJAXP 1.4の不具合ではないだろうか?
なお、WSDLをローカルファイルとして保存(拡張子は.wsdl)してから、wsimportコマンドで読み込ませると警告は出なくなる。しかし、拡張子を.xmlとして保存すると何故か警告は消えない。
更に拡張子を.xmlとしても、上記の"xxxxx"の定義を使用している個所より上に持ってくると、警告は出なくなる。
いまいち根本的な原因が良く分からないのだが、とりあえず大きな問題では無さそうなので、調査は一旦終了。
参考:
http://www.nabble.com/undefined-element-declaration-using-xjc-api-td5772414.html#a5799902