2013-04-09 22 views
2

我從SAX解析器轉換爲JAXB - 無法弄清楚如何將多個標記/屬性值解組爲單個(可壓縮的)Java POJO。JAXB:如何解組由多個標記或屬性值組成的Java對象

我的XML文件是這樣的:

<item validFrom="1950" validUntil="1980"> 
    <description>some text</description> 
</item> 

的 「validFrom」 和 「validUntil」 的價值觀應該被組合成一個有效的 「MutableRange」 POJO(見下文定義)。

,我需要來解讀它

在Java項目的定義是:

@XmlRootElement 
@XmlAccessorType(XmlAcccessType.FIELD) 
public class Item { 
    // ??? need help mapping this to be composed from "validFrom", "validUntil" attributes 
    private MutableRange validRange; 

    @XmlElement 
    private String description; 
} 

// assume all other boilerplate code exists 
public class MutableRange { 
    private int lowerBound; 
    private int upperBound; 
} 

我已經使用適配器嘗試,但它不是捕捉兩個:「從」和「到」值加在一起爲我創造MutableRange實例。我嘗試使用@XmlMixed沒有成功。

什麼是JAXB規定的方式來實現這一目標?

一旦得到解決,我將延長MutableRange用(XmlAdapter),作爲一個包裝創建番石榴的不可變的Range對象,它映射到validRange@XmlJavaTypeAdapter(MutableRange.class)

回答

1

注:我是EclipseLink JAXB (MOXy)鉛和JAXB (JSR-222)專家組的成員。

您可以使用莫西的@XmlPath擴展該用例圖:

@XmlRootElement 
@XmlAccessorType(XmlAcccessType.FIELD) 
public class Item { 
    @org.eclipse.persistence.oxm.annotations.XmlPath(".") 
    private MutableRange validRange; 

    @XmlElement 
    private String description; 
} 

更多信息

0

我會使用如下簡單的東西:

public interface MutableRange() { 
    public int getLowerBound(); 
    public int getUpperBound(); 
    public void setLowerBound(int lowerBound); 
    public void setUpperBound(int upperBound); 
} 

@XmlRootElement(name = "item") 
@XmlAccessorType(XmlAccessType.NONE) 
public class Item { 
    @XmlAttribute(name = "validFrom") 
    private int validFrom; 
    @XmlAttribute(name = "validUntil") 
    private int validUntil; 
    @XmlElement(name = "description") 
    private String description; 

    public MutableRange getValidRange() { 
     return new MutableRange() { 
      public int getLowerBound() { return validFrom; } 
      public int getUpperBound() { return validUntil; } 
      public void setLowerBound(int lowerBound) { validFrom = lowerBound; } 
      public void setUpperBound(int upperBound) { validUntil = upperBound; } 
     } 
    } 

    public String getDescription() { 
     return description; 
    } 
} 
相關問題