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

Mar*_*tin 6 java xml jaxb

我收到以下错误:

If a class has @XmlElement property, it cannot have @XmlValue property
Run Code Online (Sandbox Code Playgroud)

更新课程:

    @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;
    }

}
Run Code Online (Sandbox Code Playgroud)

我想通过元素属性和值来获得以下输出:

<currencyCode plaintext="£">GBP</currencyCode>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?如果我有@XmlRootElement(name ="priceInclVat")可以吗?

bdo*_*han 13

对于错误:

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

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

private double amount;
Run Code Online (Sandbox Code Playgroud)

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

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

我怎样才能做到这一点?如果我有@XmlRootElement(name ="priceInclVat")可以吗?

你可以用实例PriceInclVatInfo中的实例JAXBElement来覆盖在根元素和封送.