以下は、問題を示す絶対に自明で最小限の例です。次のインポート構成の3 つのスキーマ ファイル: A.xsd、B.xsd、C.xsd :
C.xsd ---------------- imports ----------------> A.xsd
\ /
\---- imports ---> B.xsd --- imports ----/
したがって、A.xsdは C.xsd によって直接インポートされ、B.xsdを介して間接的にインポートされます。この問題は、カタログとバインディング ファイルの両方が使用されている場合(空のファイルであっても)、 C.xsdでxjc (ver. 2.2.4 )を実行しようとすると発生します。
A.xsd
<schema targetNamespace="foo://a"
xmlns="http://www.w3.org/2001/XMLSchema">
<simpleType name="year">
<restriction base="dateTime">
<pattern value="\d{4}"/>
</restriction>
</simpleType>
</schema>
B.xsd
<schema targetNamespace="foo://b"
xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="foo://a" schemaLocation="boo://a.xsd"/>
</schema>
C.xsd
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="foo://c">
<import namespace="foo://a" schemaLocation="A.xsd"/>
<import namespace="foo://b" schemaLocation="B.xsd"/>
</schema>
カタログ.xml
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<system systemId="boo://a.xsd" uri="A.xsd"/>
</catalog>
バインディング.xjb
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.1"/>
上記のファイルを指定すると、すべてが同じディレクトリに配置され、以下の呼び出しが成功します。
xjc -d src -extension -catalog catalog.xml C.xsd
一方、次の呼び出し:
xjc -d src -extension -catalog catalog.xml C.xsd -b bindings.xjb
...バグのようなメッセージで失敗します(内部の混乱を指していますか?):
parsing a schema...
[ERROR] 'year' is already defined
line 8 of file:/home/brutus/A.xsd
[ERROR] (related to above error) the first definition appears here
line 3 of file:/home/brutus/A.xsd
Failed to parse a schema.
アップデート
バグレポートを投稿しました。