我可以使用JAXB通过xml架构处理XML架构吗?

时间:2011-07-18 13:24:51

标签: java xsd jaxb

我需要在XSD中处理类型及其关系(查找从抽象类型降序的所有具体类型等) 这个页面声称它可以通过JAXB:http://www.antonioshome.net/blog/2009/20091012-1.php但是我收到了Java 6附带的xjc错误。错误是:

[ERROR] Element "{http://www.w3.org/2001/XMLSchema}annotation" shows up in more
than one properties.
  line 248 of file:/C:/tmp/xsdProcessing/XMLSchema.xsd

[ERROR] The following location is relevant to the above error
  line 242 of file:/C:/tmp/xsdProcessing/XMLSchema.xsd

我已经看到了对问题的引用,但我没有看到对问题来源或解决方案的任何明确解释。 到目前为止,是否可以使用JAXB来处理xml架构的xml架构?如果没有,会有什么替代方案? JAXB如何处理模式来创建Java对象?

3 个答案:

答案 0 :(得分:1)

您的XMLSchema似乎无效。您是否尝试针对XML处理工具(例如带有XML插件的Notepad ++或XmlSpy)验证它?

答案 1 :(得分:0)

是的,你可以让它与xjc一起使用。您遇到的问题是我在解决此问题时遇到的两个障碍中的第一个。

我并不完全清楚问题的根源,但解决方案是JAXB RI中存在的“更简单,更好的绑定”扩展。它有点here和Kohsuke Kawaguchi的其他一些旧博客文章中描述,我现在找不到。

如果在运行xjc时使用-extension标志,并且my answer to another question中的绑定文件类似于我尝试编译XMLSchema.xsd时遇到的第二个问题,那么应该会成功。

公平地说,我还没有尝试(联合)编组任何导入XML Schema的XML,因此可能还有更多我尚未遇到的问题。

答案 2 :(得分:0)

我遇到了与JAXB 2.1.10相同的问题。这似乎是Java 7中JAXB的已知问题。使用以下JAXB绑定文件解决了问题:

<?xml version="1.0" encoding="UTF-8"?>
<!-- bindings.xml -->
<jaxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    jaxb:extensionBindingPrefixes="xjc"
    version="2.1">

    <jaxb:bindings schemaLocation="XMLSchema.xsd" node="//xs:element[@name='schema']/xs:complexType/xs:complexContent/xs:extension/xs:sequence[1]">
        <jaxb:property name="SchemaElements"/>
    </jaxb:bindings>
</jaxb:bindings>

输出:

$ls
XMLSchema.dtd  XMLSchema.xsd  bindings.xml  datatypes.dtd  src  xml.xsd

$xjc -version
xjc version "JAXB 2.1.10 in JDK 6"
JavaTM Architecture for XML Binding(JAXB) Reference Implementation, (build JAXB 2.1.10 in JDK 6)

$xjc -p com.example.document.xsd -d src -extension -b bindings.xml XMLSchema.xsd
parsing a schema...
compiling a schema...
com\example\document\xsd\All.java
com\example\document\xsd\Annotated.java
com\example\document\xsd\Annotation.java