我是JaxB World的新角色,我面臨着一個問題w.r.t.將存儲的xml內容解組到Java類對象中。問題描述如下。讓我知道這是可以解決的 我有一個包含以下內容我的XSD文件(這只是一個例子) 學生信息 基於具體實例的反編組
<xs:complexType name="specialization" abstract="true">
</xs:complexType>
<xs:complexType name="Engineering">
<xs:complexContent>
<xs:extension base="specialization">
<xs:sequence>
<xs:element name="percentage" type="xs:int" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Medical">
<xs:complexContent>
<xs:extension base="specialization">
<xs:sequence>
<xs:element name="grade" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
現在所有相應的Java類是通過編譯xsd生成的。現在我們假設在我的應用程序中,我將通過構建工程類實例來設置學生信息的特化屬性。因此,所有的操作後,當我保存 是得到保存會有像下面
<Student>
<Name>Name1</Name>
<Specialization>
<percentage>78<percentage>
</Specialization>
</Student>
現在,當上述內容無二解組條目的XML文件,解組失敗說意想不到的元素。我想這是b'cos專業化元素是專門類型的,它調用本身的unmarshalling而不是存儲的派生對象。
我希望我的解釋清楚。有沒有什麼方法可以基於派生類實例類型進行解組? xsd和bindings.xjb文件完全在我的控制之中,所以我可以添加或修改任何表達式以傳遞解組規則來解開派生類。
感謝您的建議,但它仍然不適合我。
這裏是我試過
選項#1 - XSI:類型
我的XSD看起來一樣的東西在例子解釋,但仍然是XSI的:式中不產生XML來。編譯時是否需要添加其他設置?我應該使用哪個JaxB版本?
選項#2 - 替換組
當我在我的xsd中添加替換條目部分時,XSD編譯失敗,說重複的名稱爲「Engineering」和「Medical」。我猜元素名稱和類型名稱是相同的彙編嬰兒牀(所有工程,醫療,專業化在類型定義和元素名稱都相同)
我無法修改生成的類,因爲我們正在使用模型驅動架構。唯一掌握的就是xsd。任何對xsd的修改都是允許的。理想情況下,第一選擇應該已經工作但無法弄清楚它爲什麼不起作用。如果您有一些建議來縮小問題,請告訴我。
感謝您的建議,但它仍然沒有工作爲了我。 這是我試過的 選項#1 - xsi:type 我的xsd看起來與示例中所解釋的相同,但Xsi:類型不在xml中。編譯時是否需要添加其他設置?我應該使用哪個JaxB版本? – user1110282 2011-12-23 14:15:25
選項#2 - 替換組 當我在我的xsd中添加替換條目部分時,XSD編譯失敗,說重複名稱爲「Engineering」和「Medical」。我猜元素名稱和類型名稱是相同的彙編子句(所有工程,醫學,專業化在類型定義和元素名稱都相同) 我不能修改生成的類,因爲我們正在使用模型驅動的體系結構。唯一掌握的就是xsd。任何對xsd的修改都是允許的。理想情況下,第一選擇應該已經工作但無法弄清楚它爲什麼不起作用。讓我知道你是否有一些建議 – user1110282 2011-12-23 14:16:10