我在构建一组模式的JAXB绑定方面遇到了一些麻烦,这让我有点慌张。这是有问题的模式(它只是这个特定构建中的一个模式):
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xml="http://www.w3.org/XML/1998/namespace" targetNamespace="http://www.w3.org/XML/1998/namespace">
<attribute name="lang" type="language">
<annotation>
<documentation>In due course, we should install the relevant ISO 2- and 3-letter
codes as the enumerated possible values . . .</documentation>
</annotation>
</attribute>
<attribute name="space" default="preserve">
<simpleType>
<restriction base="NCName">
<enumeration value="default"/>
<enumeration value="preserve"/>
</restriction>
</simpleType>
</attribute>
<attributeGroup name="specialAttrs">
<attribute ref="xml:lang"/>
<attribute ref="xml:space"/>
</attributeGroup>
xjc声称上面声明的属性已在其他地方声明:
parsing a schema...
[ERROR] 'lang' is already defined
line 26 of file:../../gml/3.1.1/smil/xml-mod.xsd
[ERROR] (related to above error) the first definition appears here
line 88 of http://www.w3.org/2001/03/xml.xsd
[ERROR] 'space' is already defined
line 34 of file:../../gml/3.1.1/smil/xml-mod.xsd
[ERROR] (related to above error) the first definition appears here
line 95 of http://www.w3.org/2001/03/xml.xsd
[ERROR] 'specialAttrs' is already defined
line 39 of file:../../gml/3.1.1/smil/xml-mod.xsd
[ERROR] (related to above error) the first definition appears here
line 111 of http://www.w3.org/2001/03/xml.xsd
Failed to parse a schema.
做一些研究会让我相信问题是我需要一个绑定文件来解决重复的属性....我有一个:
<jaxb:bindings version="1.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jaxb:extensionBindingPrefixes="xjc">
<jaxb:bindings schemaLocation="../../gml/3.1.1/smil/xml-mod.xsd" node="/xs:schema">
<jaxb:bindings node="//xs:attribute[@name='lang']">
<jaxb:property name="langAttribute"/>
</jaxb:bindings>
<jaxb:bindings node="//xs:attribute[@name='space']">
<jaxb:property name="spaceAttribute"/>
</jaxb:bindings>
<jaxb:bindings node="//xs:attributeGroup[@name='specialAttrs']">
<jaxb:property name="specialAttrsAttribute"/>
</jaxb:bindings>
</jaxb:bindings>
然而问题仍然存在。带或不带绑定文件的错误消息是相同的。我知道正在使用该文件,因为如果我弄乱了节点选择器的xpath,我会收到一条错误消息。这就像xjc知道绑定文件存在但忽略它。
这是无法构建绑定的命令行:
C:\tools\jaxb-ri-20110512\bin\xjc -episode ..\..\..\common.ogc -d ..\..\..\src -p com.ogc.bindings -b ..\..\..\bindings.xsd -catalog ..\..\..\ogc.cat -extension sosAll.xsd
我用jdk6 native jaxb(2.0)和jaxb 2.2.4(我在endorsed目录中安装了jaxb-api.jar)尝试了这个。
答案 0 :(得分:4)
XJC(与JDK捆绑在一起),如果绑定文件或XSD / WSDL的路径太长,则忽略绑定文件。
在Oracle 64位JDK 1.6.0.45上,在Windows 7终极版和Linux上,XJC(与JDK捆绑在一起)上观察并确认了问题,如果绑定文件的路径太长,则会忽略绑定文件。
我没有时间对这个问题进行详细研究;我通过简单地缩短svn checkout路径解决了我的问题。这是最离奇的问题 - 我无法在Windows 8笔记本电脑和Linux上重现这个问题,但在Windows 7工作站上,构建仍然失败。我通过确认其他路径确定了这个问题,构建工作的Windows 8 LAPTOP与路径有点长的Windows 7旗舰版(6个字符 - &gt; /trunk)之间没有区别。
在没有任何代码,配置,xml架构或绑定文件更改的情况下解决了问题。在这里张贴,以便其他可能遇到这种情况的人比我更容易。
答案 1 :(得分:0)
我认为这是命名空间冲突的一个问题,你没有为你的架构元素定义一个命名空间,而且似乎你使用的属性名称与xml架构中定义的名称相冲突(xml.xsd)< / p>
答案 2 :(得分:0)
当您尝试编译OGC架构时,您可能会发现this project有用。它包含已编译的SOS模式。