我正在寻求使用JAXB解析从调用Sharepoint 2010的REST服务返回的Atom提要,并在eclipse中构建JAXB绑定和编译。我在网上找到了几个不同版本的原子xsd(它们只在一些标题属性上有所区别),包括这一个(http://www.kbcafe.com/rss/atom.xsd.xml)但是我一直都是无论我使用哪种错误,都会出现以下错误:
[xjc] [WARNING] schema_reference.4: Failed to read schema document 'http://www.w3.org/2001/03/xml.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
[xjc] line 14 of file:/C:/rest_workspace/eDocs/src/gov/afms/edocs/rest/jaxb/schemas/AtomSchema2.xsd
[xjc] [ERROR] src-resolve: Cannot resolve the name 'xml:base' to a(n) 'attribute declaration' component.
[xjc] line 292 of file:/C:/rest_workspace/eDocs/src/gov/afms/edocs/rest/jaxb/schemas/AtomSchema2.xsd
[xjc] [ERROR] s4s-elt-must-match.1: The content of 'commonAttributes' must match (annotation?, ((attribute | attributeGroup)*, anyAttribute?)). A problem was found starting at: attribute.
[xjc] line 292 of file:/C:/rest_workspace/eDocs/src/gov/afms/edocs/rest/jaxb/schemas/AtomSchema2.xsd
我已经看到一些评论说Java5 Xerces有一些问题,但是我从我的ant脚本中回复了我的java版本并使用了1.6。第14行的节点是:
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/03/xml.xsd" />
第292行的节点是:
<xs:attribute ref="xml:base" />
请注意,eclipse也会将这些内容标记为错误。对于警告,eclipse说“XSD:位置'http://www.w3.org/2001/03/xml.xsd'尚未解决”,对于错误行,它显示“XSD:属性引用”http: //www.w3.org/XML/1998/namespace#base'未解决“。它也是293上的错误,与上面类似但指向lang而不是base。
我很奇怪解析器正在尝试解析对命名空间文档的引用,因为它似乎只是一个解释命名空间的HTML文档,而不是XSD或DTD。但是这个Atomschema2.xsd不是我编写的,而是下载的。
我应该在这做什么?有更好的原子模式吗?我应该修改我下载的模式以查找引用吗?第三件事?
答案 0 :(得分:2)
错误通常是由xml.xsd文件顶部的DTD DOCTYPE引起的;我从未试图用JAXB来解决它,但我可以保证,如果你下载,修复引用,并删除&lt;!DOCTYPE ... []&gt;从xml.xsd文件开始,JAXB将使用您指向的架构开箱即用(我刚刚在NetBeans 7.1中尝试过它,没有任何问题)。我想现在一个很好的问题是如何让JAXB的xjc忽略DTD ......
更新:命令行中的-catalog可能会这样做,请阅读this。