我一直在進行大量的研究,試圖弄清楚這一點,但是 仍然不成功。JAXB2 map xsd:限制作爲子類和(un)marshall xsi:類型
我有一些XSD的遵循此模式:
Simple_Identification.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="./Base_3039.xsd"/>
<xsd:include schemaLocation="./Simple_A.xsd"/>
<xsd:include schemaLocation="./Simple_S.xsd"/>
<xsd:include schemaLocation="./Simple_N.xsd"/>
<xsd:include schemaLocation="./Simple_V1.xsd"/>
<xsd:include schemaLocation="./Simple_L.xsd"/>
<xsd:include schemaLocation="./Simple_V.xsd"/>
<xsd:include schemaLocation="./Simple_C.xsd"/>
<xsd:simpleType name="Simple_Identification">
<xsd:restriction base="Base_3039"/>
</xsd:simpleType>
</xsd:schema>
其中,例如Simple_S.xsd看起來是這樣的:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="./Simple_Identification.xsd"/>
<xsd:simpleType name="Simple_S">
<xsd:restriction base="Simple_Identification">
<xsd:minLength value="14"/>
<xsd:maxLength value="14"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
最終,我希望能夠生成包含的XML文件 標籤看起來像這樣:
<Identification xsi:type="Simple_S">XYZUVW</Identification>
目前,而不啓用mapSimpleTypeDef,我能夠 馬歇爾/和解組XML文件,忽略了簡單的類型,如Simple_S。
啓用mapSimpleTypeDef類後,將爲簡單的 類型生成類。 Simple_Identification被映射到包含Base_3039字段的類。 Base_3039類包含一個String字段。但是,Simple_Identifications的不同子類的類不會擴展Simple_Identification,但只包含Simple_Identification類型的字段,在編組/解組時不起作用。
例如,解組此XML文件時:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Header xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="...">
<Identification>EDS-200708021031-950012222329</Identification>
<Time>2007-08-02T10:31:44.449+01:00</Time>
<Function>9</Function>
<Sender>
<Identity xsi:type="Simple_S">111111380002111</Identity>
</Sender>
</Header>
認同的價值是unmashalled到Simple_Identification對象不是一個專門的Simple_S對象。而且,如果我收回所有xsi:type屬性,則會在生成的XML中丟失。
所以,基本上,我的問題是我該如何正確解組並生成包含xsi:types的XML。我正在使用的模式不適合做這個嗎?是否將xsd:restriction解釋爲JAXB的繼承類型?
請注意,XSD不是我的修改,我只需要與他們合作來正確地讀取和生成XML。
感謝您花時間幫我弄清楚這一點!
-Anca
嗨xcut-感謝您的回答,它使事情變得更加清晰。在這種情況下,我猜想,僅僅基於我擁有的XSD,我無法生成類似上述示例的XML文件。 爲了能夠生成包含xsi:types的東西,我正在考慮使用JDOM來構造XML,然後根據模式進行驗證。 你有更好的建議嗎? – Anca 2011-05-19 14:54:56