下面是演示该问题的绝对微不足道的最小示例。以下导入配置中的三个模式文件:A.xsd、B.xsd、C.xsd :
C.xsd ---------------- imports ----------------> A.xsd
\ /
\---- imports ---> B.xsd --- imports ----/
因此A.xsd由C.xsd直接导入,并再次通过B.xsd间接导入。当同时使用目录和绑定文件(甚至是空文件)时,尝试在C.xsd上运行xjc(版本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.
更新
发布了一个错误报告。