2014-09-23 93 views
4

我得到以下錯誤:如果一個類@XmlElement屬性,也不能有@XmlValue財產

If a class has @XmlElement property, it cannot have @XmlValue property 

更新類:

@XmlType(propOrder={"currencyCode", "amount"}) 
    @XmlRootElement(name="priceInclVat") 
    @XmlAccessorType(XmlAccessType.FIELD) 
    public class PriceInclVatInfo { 

    @XmlAttribute 
    private String currency; 
    @XmlValue 
    private String currencyCode; 
    private double amount; 

    public PriceInclVatInfo() {} 

    public PriceInclVatInfo(String currency, String currencyCode, double amount) { 
     this.currency = currency; 
     this.currencyCode = currencyCode; 
     this.amount = amount; 
    } 

    public String getCurrency() { 
     return currency; 
    } 

    public void setCurrency(String currency) { 
     this.currency = currency; 
    } 

    public String getCurrencyCode() { 
     return currencyCode; 
    } 

    public void setCurrencyCode(String currencyCode) { 
     this.currencyCode = currencyCode; 
    } 

    public double getAmount() { 
     return amount; 
    } 

    public void setAmount(double amount) { 
     this.amount = amount; 
    } 

} 

我想才達到以下輸出,帶有元素屬性和值:

<currencyCode plaintext="£">GBP</currencyCode> 

我該如何做到這一點?如果我有@XmlRootElement(name =「priceInclVat」),可能嗎?

回答

12

對於錯誤:

If a class has @XmlElement property, it cannot have @XmlValue property

既然你指定的字段訪問,默認情況下未註釋amount場被視爲具有@XmlElement

private double amount; 

您可以執行下列操作之一:

  1. 標註amount@XmlAttribute
  2. 標註amount@XmlTransient
  3. @XmlAccessorType(XmlAccessType.FIELD)更改爲@XmlAccessorType(XmlAccessType.NONE),以便只有註釋的字段被視爲映射。

How can I achieve this? Is it possible if I have @XmlRootElement(name="priceInclVat")?

可以在JAXBElement實例包的PriceInclVatInfo實例以覆蓋在根元素和封送。

+0

謝謝,我用@XmlAttribute註解了數量,並解決了我的問題。 – Martin 2014-09-24 08:15:50

+0

XmlTransient幫助了我,謝謝。 – 2016-05-20 06:58:10