| prev | table of contents | next |
XmlID, XmlIDREF
The section Referring to
Another XML Element describes the usefulness of using references
rather than repeatedly serialized content. Two annotations instruct
JAXB to use references: XmlID must define a field of
some class with type java.lang.String that is suited
to be used as a key, and XmlIDREF is attached to any
field that references objects of that class. Both annotations may
be used in addition to XmlElement.
We'll illustrate an application of these annotations in a somewhat
more sophisticated pattern resulting from the possibility of
attaching XmlIDREF to a field of some collection type.
In this case, the collection item type must contain an id field.
Below is a group of Java classes defining an Item class
and a Document class. The latter contains a list
of existing items and a Cluster object that wraps
a Set<Item> field containing references to
some of the items from the list.
import javax.xml.bind.annotation.*;
public class Item {
private String id;
private String name;
public Item(){}
@XmlID
public String getId(){ ... }
public void setId( String value ){ ... }
@XmlElement
public String getName(){ ... }
public void setName( String value ){ ... }
}
import java.util.HashSet;
import java.util.Set;
import javax.xml.bind.annotation.*;
public class Cluster {
private Set<Item> items;
private String title;
public Cluster(){ ... }
@XmlIDREF
public Set<Item> getItems(){ ... }
}
package elset;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Document {
private Cluster cluster;
private String title;
private List<Item> items;
public Document(){ ... }
@XmlElement
public Cluster getCluster(){ ... }
public void setCluster( Cluster value ){ ... }
@XmlElement
public String getTitle(){ ... }
public void setTitle( String value ){ ... }
@XmlElement
public List<Item> getItems(){ ... }
}
| prev | table of contents | next |