如果类具有@XmlElement属性,则它不能具有@XmlValue属性

时间:2014-09-23 14:54:40

标签: java xml jaxb

我收到以下错误:

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 =&#34; priceInclVat&#34;)可能吗?

1 个答案:

答案 0 :(得分:13)

对于错误:

  

如果某个类具有@XmlElement属性,则它不能具有@XmlValue属性

由于您已指定字段访问权限,因此默认情况下,未注释的amount字段将被视为具有@XmlElement

private double amount;

您可以执行以下操作之一:

  1. 使用amount
  2. 注释@XmlAttribute
  3. 使用amount注释@XmlTransient
  4. @XmlAccessorType(XmlAccessType.FIELD)更改为@XmlAccessorType(XmlAccessType.NONE),以便仅将带注释的字段视为已映射。

  5.   

    我怎样才能做到这一点?如果我有可能的话   @XmlRootElement(名称= “priceInclVat”)?

    您可以将PriceInclVatInfo的实例包装在JAXBElement的实例中,以覆盖根元素并封送它。