如何使用@XmlIDREF和@XmlID

时间:2019-05-30 09:33:46

标签: java xml annotations jaxb

我不太了解@XmlIDREF@XmlID是如何一起工作的。通过使用XmlIDREF,我仅创建对实际元素的引用。但是,XmlID的用例是什么。

我想创建对类Publication的引用。用@XmlIDREF注释发布列表是否足够?

public class Author {

    private String id;
    private String name;
    private List<Publication> publications = new LinkedList<>();

    public Author() {
        super();
    }
    @XmlElement
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @XmlElement
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
    @XmlIDREF
    public List<Publication> getPublications() {
        return publications;
    }

1 个答案:

答案 0 :(得分:0)

  

我想创建对类Publication的引用。     用@XmlIDREF注释发布列表是否足够?

不,那只是您需要的一半。

  • 您已经有这个: 使用@XmlIDREF标记关系的引用端 (从Author指向Publication)。

    public class Author {
    
        ...
    
        @XmlIDREF
        @XmlElement(name = "publication")
        public List<Publication> getPublications() {
            return publications;
        }
    
        ...
    
    }
    
  • 您还需要标记所引用的面(Publication本身) 通过用@XmlID注释其属性之一,例如:

    public class Publication {
    
        ...
    
        @XmlID
        @XmlElement
        public String getId() {
            return id;
        }
    
        ...
    }
    

然后您就可以像下面的示例一样处理XML内容:

<root>
    <publication>
       <id>p-101</id>
       <title>Death on the Nile</title>
    </publication> 
    <publication>
       <id>p-102</id>
       <title>The murder of Roger Ackroyd</title>
    </publication> 
    ...
    <author>
       <id>a-42</id>
       <name>Agatha Christie</name>
       <publication>p-101</publication>
       <publication>p-102</publication>
    </author>
    ...
</root>

您会看到XML引用(例如<publication>p-101</publication>) 映射到Java对象引用(在List<Publication> publications中)。