2011-10-20 98 views
0

我在構建JAXB綁定方案集時遇到了一些問題,它使我有點慌亂。這是有問題的模式(它可能只是模式之一,在這個特殊的版本):被忽略的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本地JAXB(2.0)和JAXB 2.2.4想這(我裝的是JAXB-api.jar文件中認可的目錄)

回答

0

就像你一樣重新嘗試編譯OGC模式,您可能會發現this project有幫助。它包含編譯的SOS模式。

+0

謝謝!那就是訣竅 – user1005939

0

我相信這是一個命名空間衝突的問題,你沒有爲你的模式元素定義的命名空間,它似乎是你的屬性使用名稱與XML模式中定義的屬性衝突( xml.xsd)

3

如果綁定文件或XSD/WSDL的路徑過長,則XJC(與JDK捆綁)會忽略綁定文件。

如果在綁定文件的路徑過長時,在Windows 7最終版和Linux上,XJC(與JDK捆綁)上的Oracle 64位JDK 1.6.0.45中觀察並確認的問題會忽略綁定文件。

我沒有時間做這個問題的詳細研究;我通過縮短svn checkout路徑解決了我的問題。這是最奇怪的問題 - 我無法在Windows 8筆記本電腦和Linux上重現問題,但在Windows 7工作站上,構建仍然失敗。通過確認其他路徑,我發現了這個問題,Windows 8的LAPTOP(構建工作)與Windows 7 Ultimate(路徑有點長(6個字符 - >/trunk))之間沒有區別。

問題解決了,沒有任何代碼,配置,XML架構或綁定文件的變化。在這裏發佈,以便其他可能遇到這個問題的人,比我更容易一點。