java - 当 -binding 与 -catalog 一起使用时,JAXB xjc 解析失败(错误?)

标签 java jaxb xjc

下面是演示该问题的绝对微不足道的最小示例。 以下导入配置中的三个架构文件:A.xsdB.xsdC.xsd:

C.xsd ---------------- imports ----------------> A.xsd
  \                                          /  
   \---- imports ---> B.xsd --- imports ----/

因此 A.xsdC.xsd 直接导入,并再次通过 B.xsd 间接导入。尝试在 C.xsd 上运行 xjc(ver. 2.2.4)时出现问题目录使用绑定(bind)文件(即使是空文件)。

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>

绑定(bind).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.

更新

发布了一个bug report .

最佳答案

我使用适用于 Mac 的 JDK 1.7.0_21-b12 附带的 XJC 运行了您的示例,它运行良好。您应该只需要从 JAXB 引用实现(请参阅:https://jaxb.java.net/)切换不是较新版本的 XJC 即可让您的用例正常工作。

了解更多信息

关于java - 当 -binding 与 -catalog 一起使用时,JAXB xjc 解析失败(错误?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17055533/

相关文章:

xml - 使用 JAXB 进行部分解码

xml - JAXB 2 注释和 XSD

java - Glassfish 5 忽略 JAXB @XmlJavaTypeAdapter 注释?

java - 从另一个类调用方法

java - Lucene 词干提取器之间的区别 : EnglishStemmer, PorterStemmer、LovinsStemmer

java - XSD 是否允许同时使用 simpleContent 和 complexContent?

java - 如何使用 moxy 将 xsd 编译成一组等效的 java 对象?

java - 用于覆盖或删除 XMLSchemaType xs :token 的 JAXB 绑定(bind)

java - 没有 Web 组件的 EJB3 中的 Jboss contextRoot

java - ObjectMapper 转换为 arraylist 不保留顺序