JAXB2注释:在列表中呈现值时会遇到麻烦

时间:2012-10-26 15:14:04

标签: java marshalling jaxb2 unmarshalling

尝试使用JAXB2注释呈现以下xml代码时遇到了一些问题:

....
<bizTransactionList>
    <bizTransaction type="urn:epcglobal:fmcg:btt:po">
        http://transaction.acme.com/po/54847
    </bizTransaction>
    <!--other entries -->
</bizTransactionList>
...

documentation之后我设法解决了以下问题: 1)在拥有列表的类中,我以这种方式注释列表getter

@XmlElementWrapper(name="bizTransactionList")
@XmlElement(name="bizTransaction")
public List<BizTransaction> getBizTransactionList() {
    return bizTransactionList;
}

2)我按如下方式创建BizTransaction类

public class BizTransaction {

    private URI transactionId;
    private URI type;

    @XmlValue
    public URI getTransactionId() {
        return transactionId;
    }

    public void setTransactionId(URI transactionId) {
        this.transactionId = transactionId;
    }

    @XmlAttribute
    public URI getType() {
        return type;
    }

    public void setType(URI type) {
        this.type = type;
    }

    public BizTransaction() {
        // TODO Auto-generated constructor stub
    }

    public BizTransaction(URI transactionId, URI type) {
        super();
        this.transactionId = transactionId;
        this.type = type;
    }

}

现在问题是该属性工作正常,但值(即transactionId变量)始终为null。 你能帮我发现问题吗?

1 个答案:

答案 0 :(得分:1)

这是一个合理的模型,但您的示例XML无效,因为bizTransaction元素值周围的前导和尾随空格意味着它不是有效的URI。如果你说

    <bizTransaction type="urn:foo">http://transaction.acme.com/po/54847</bizTransaction>
然后它会像你期望的那样工作。