2015-09-24 39 views
1

我有幾個全面的XSD包含相同成員的相同complexType定義。每個XSD都有自己的名稱空間。所以當我在xsds上運行xjc時,我得到了在每個命名空間中生成的相同complexType類。JAXB:如何指定由不同的XSD生成complexType的綁定規則?

這最終會導致極其混亂和複雜的處理。我想創建一個綁定,告訴XJC不要爲其中一個XSD生成complexType,而要使用已經由其他xsd生成的類。

我已經嘗試沒有成功如下:

<jaxb:bindings schemaLocation="../xsd/sandboxlist.xsd"> 
     <jaxb:bindings node="/xsd:schema"> 
      <jaxb:schemaBindings> 
       <jaxb:package name="com.domain.schema.model.v4_0.sandboxlist"/> 
      </jaxb:schemaBindings> 
     </jaxb:bindings> 
     <jaxb:bindings node="//xsd:complexType[@name='SandboxType']"> 
      <jaxb:class name="com.domain.schema.model.v4_0.sandboxinfo.SandboxType" /> 
     </jaxb:bindings> 
    </jaxb:bindings> 

我期待告訴XJC是SandboxType在sandboxlist.xsd實際上應該是com.domain.schema.model.v4_0.sandboxinfo.SandboxType類(從不同的XSD推出)。

這是什麼適當的語法?

回答

1

您可以通過jaxb:class/@ref實現這一目標:

<jaxb:class ref="com.domain.schema.model.v4_0.sandboxinfo.SandboxType" /> 

但是,更好的,use episodes。使用-episode CLI參數生成,然後將您的JAR添加到xjc命令行。

+0

謝謝!我終於偶然在另一篇文章中偶然發現了ref屬性。很遺憾,綁定文件在任何地方都沒有更好的文檔記錄(或者至少我可以輕鬆找到!)。但是我對'episodes'很感興趣,並且會深入研究。但是,我遇到的問題是SandboxType在兩個XSD中都有定義,因此從我的快速理解中,我不認爲這些情節會有所幫助。如果我的理解錯誤,請糾正我。 –

+0

下面是更多情節:http://stackoverflow.com/questions/9756185/what-is-an-episode-file – lexicore

+0

如果你的類型是在兩個模式中定義,那麼不,情節不會有太大的幫助。但我認爲你不能將兩個不同的複雜類型綁定到同一個類上。我猜會有命名空間衝突。 – lexicore