我需要在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对象?
答案 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