這是我的第一個問題,所以請溫柔;)Chameleon XSD導入的JAXB解決方法?
我困住了一個奇怪的問題。基本上我得到三個XSD定義如下所示:
PartA.xsd
targetNameSpace="PartA"
include="PartB.xsd"
PartB.xsd
<!-- no namespace definition!!! -->
PartC.xsd
targetNameSpace="PartC"
inlude="PartB.xsd"
import="PartA.xsd"
錯誤彈出,通過JAXB綁定C部分到Java類時:
- 具有相同的名稱「B類/接口。 exampleType「已被使用。使用類定製來解決此衝突。
- 這個令人困惑的錯誤發生的原因很可能是因爲該模式使用了一種名爲「chameleon schema」的技術,該技術會導致將單個定義多次加載到不同的名稱空間中。有關更多信息,請參閱http://forums.java.net/jive/thread.jspa?threadID=18631。
下面的鏈接,我發現,實際的錯誤在於PartB,它沒有命名空間聲明!此方法稱爲變色龍架構。 PartB中定義的類型將採用導入XSD的的名稱空間。
所以在我的情況下,對於同一類型的兩個命名空間:
- 「A部」
- 「C部分」
這就是,在JAXB分解。我還沒有找到正確綁定PartC的方法。和(使事情棘手)我有機會改變原來的XSD定義!
有沒有人遇到過這種現象或之前類似的東西,並有一個有效的解決方法呢?
感謝您的鏈接,但你是對的,它不是很詳細。由於我沒有對架構的寫訪問權限,我被卡住了。 ......雖然,也許我可以與模式作者爭論「在其他一些情況下,變色龍模式可以被認爲是一種糟糕的模式設計,因爲它在很多地方複製了定義。」點。 – Gruber 2010-10-21 09:17:06