In my understanding, you will not be able to process a plain List via JAXB, as JAXB has no idea how to transform that into XML.
Instead, you will need to define a JAXB type which holds a List<RelationCanonical> (I’ll call it Type1), and another one to hold a list of those types, in turn (as you’re dealing with a List<List<...>>; I’ll call this type Type2).
The result could then be an XML ouput like this:
<Type2 ...>
<Type1 ...>
<RelationCanonical ...> ... </RelationCanonical>
<RelationCanonical ...> ... </RelationCanonical>
...
</Type1>
<Type1>
<RelationCanonical ...> ... </RelationCanonical>
<RelationCanonical ...> ... </RelationCanonical>
...
</Type1>
...
</Type2>
Without the two enclosing JAXB-annotated types, the JAXB processor has no idea what markup to generate, and thus fails.
–Edit:
What I mean should look somewhat like this:
@XmlType
public class Type1{
private List<RelationCanonical> relations;
@XmlElement
public List<RelationCanonical> getRelations(){
return this.relations;
}
public void setRelations(List<RelationCanonical> relations){
this.relations = relations;
}
}
and
@XmlRootElement
public class Type2{
private List<Type1> type1s;
@XmlElement
public List<Type1> getType1s(){
return this.type1s;
}
public void setType1s(List<Type1> type1s){
this.type1s= type1s;
}
}
You should also check out the JAXB section in the J5EE tutorial and the Unofficial JAXB Guide.