2011-10-29 128 views
1

圖片我有這樣<someElement a="" b="" number="1" scale="meters"><child/></someElement>JAXB轉換多個屬性的一種類型在解

規模和數量的元件總是同時出現,但它們沒有在一個專用元件限定。

當解編someElement元件到SomeElement Java實例我想在SomeElement類單個成員來表示numberscale

此刻數字和比例都是屬性,然後使用afterUnmarshall()方法計算一個數字。

有沒有辦法做到這一點,沒有兩個成員字段的大小和規模?也許用XmlAdapter?我如何在這種情況下使用它?

回答

1

備註:我是EclipseLink JAXB (MOXy)的領導者和JAXB 2 (JSR-222)專家組的成員。

MOXy提供@XmlTransformation擴展,它允許您將Java字段/屬性表示爲多個XML節點。

更多信息

UPDATE

另外,您可以使用一個XmlAdapter這個用例。適配器將負責將表示數字和比例的單一類型(下面表示爲FOO)轉換爲具有數字和比例單獨屬性的類型。您仍然需要使用莫西實現以利用@XmlPath擴展:

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class SomeElement { 

    @XmlAttribute 
    private String a; 

    @XmlAttribute 
    private String b; 

    @XmlJavaTypeAdapter(NumberAndScaleAdapter.class) 
    @XmlPath(".") 
    private FOO numberAndScale; 

    private Child child; 

} 

更多信息

+0

我使用的參考實現並且只添加了允許我使用XmlReadTransformer的MOXy庫。但沒有任何事情發生。我是否也必須使用XmlWriteTransformer,還是必須將整個JAXB處理切換爲MOXy? –

+0

@FranzKafka - 您需要將此應用程序的JAXB提供程序切換爲MOXy:http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html –

+1

@BlaiseDoughan Can not你說服JCP實際上讓MOXY成爲RI?我肯定不介意:D –

1

this question的答案似乎與您正在嘗試做的事情相符。或者至少有一些相反的情況。所以你可以創建一個使用XmlAdapter的un/marshals的自定義類型,或者你可以對你的getter/setter邏輯調皮搗蛋。

相關問題