Jaxb XML属性

时间:2013-05-08 19:37:27

标签: java jaxb

我正在使用JAXB将java对象编组为XML。我需要创建像

这样的东西

<link rel="self" href="test" />

如何做到这一点?我应该使用什么注释。

任何帮助都会受到极大关注

Java Class

public class Item {

    private String title;
    private int price;

    private String productLink;
    private String rel;

    public String getTitle() {
    return title;
    }

    public void setTitle(String title) {
    this.title = title;
    }

    public int getPrice() {
    return price;
    }

    public void setPrice(int price) {
    this.price = price;
    }

    @XmlPath("link/@href")
    public String getProductLink() {
    return productLink;
    }

    public void setProductLink(String productLink) {
    this.productLink = productLink;
    }

1 个答案:

答案 0 :(得分:1)

您可以创建一个Link类注释@XmlRootElement,其中包含使用rel注释的属性(href@XmlAttribute)。

以下教程将帮助您熟悉JAXB (JSR-222)


选项#1 - 使用EclipseLink JAXB(MOXy)作为JAXB提供程序

使用EclipseLink JAXB (MOXy)中的@XmlPath扩展程序,您可以执行以下操作:

@XmlPath("link[@rel='self']/@href")
public String getProductLink() {
    return productLink;
}

了解更多信息


选项#2 - 使用JAXB提供程序

您可以使用XmlAdapter

@XmlElement(name="link")
@XmlJavaTypeAdapter(LinkAdapter.class)
public String getProductLink() {
    return productLink;
}

LinkAdapter

import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class LinkAdapter extends XmlAdapter<LinkAdapter.Link, String>{

    public static class Link {

        @XmlAttribute
        public String rel = "self";

        @XmlAttribute
        public String href;
    }

    @Override
    public String unmarshal(Link v) throws Exception {
        return v.href;
    }

    @Override
    public Link marshal(String v) throws Exception {
        Link link = new Link();
        link.href = v;
        return link;
    }

}