2013-01-22 62 views
1

我想使用工廠方法而不是JAXB的無參數構造函數。JAXB中的工廠方法訪問元素?

我有多個繼承自基類的類,唯一指示哪個實例化的屬性是xml元素中的type屬性。

<tag-name type="boolean"/> 

將實例化一個BooleanType,而

<tag-name type="integer"/> 

將實例化一個IntegerType。

有沒有什麼辦法可以從factory方法中訪問正在解組的元素的元素名稱/屬性值?

(是這樣的,也許,使用工廠方法在一個無參數的構造函數的好處?有其他嗎?)

(我不使用莫西)

回答

3

我有多個類從基類繼承而來,並且唯一的將被實例化的指示是 xml元素中的屬性類型。

使用任何JAXB (JSR-222)實現,您可以使用XmlAdapter映射繼承關係,其中任意XML屬性是繼承指示符。

然而,而不是使用任意的XML屬性我會用xsi:type屬性,這樣的內容可以通過XML架構正確驗證。

如果你仍然想使用任意的XML屬性和您正在使用EclipseLink MOXy是您的JAXB提供者,那麼你可以充分利用@XmlDescriminatorNode/@XmlDescriminatorValue擴展:


有什麼辦法可以訪問元素名稱/屬性值 從工廠方法中解組的元素?

JAXB實現允許您通過@XmlType註釋指定工廠類和方法,但我不相信這是您在本用例中尋找的內容。

要利用XML內容,以確定合適的個子類的實例,你就需要使用XmlAdapter方法。

+1

謝謝!我對適配器瞭解不多,但我一定會考慮它們的。順便說一下,我認爲我看到的與JAXB相關的每個問題都有你的答案。當你回答這個問題時,我並不感到驚訝。 – chama