JAXB et la résolution de la liste Jersey?
Question
J'ai défini la XSD suivante pour générer des objets JAXB. Il fonctionne bien.
<xsd:element name="Person" type="Person" />
<xsd:complexType name="Person">
<xsd:sequence>
<xsd:element name="Id" type="xsd:int" />
<xsd:element name="firstName" type="xsd:string" />
<xsd:element name="lastName" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="People">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Person" minOccurs="0" maxOccurs="unbounded"
type="Person" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
J'utilise Spring RowMapper pour cartographier les lignes de ma base de données en objets personne. Donc, je finis
avec une liste
Alors dans ma classe de ressources Jersey J'ai:
@GET
@Path("/TheListOfPeople")
public List<Person> getListOfPeople() {
List<Person> list = dao.getList();
return list;
}
Le fichier XML qui est retourné est:
<?xml version="1.0" encoding="UTF-8" standalone="yes" >
<people>
<Person>...</Person>
<Person>...</Person>
<Person>...</Person>
<Person>...</Person>
</people>
Ma question est comment est-il fait le mappage de la liste
EDIT Ceci est en quelque sorte lié à cette question: JAXB Collections (Liste
La solution
On dirait que ce n'est pas vraiment en utilisant la XSD du tout
C'est parce qu'il ne fonctionne pas. JAXB utilise uniquement le schéma généré lorsque le code en utilisant XJC; après qu'il n'a pas l'usage, lors de l'exécution, il utilise uniquement les annotations (il peut aussi l'utiliser pour la validation, mais ce n'est pas pertinent en l'espèce).
Votre méthode REST retourne List<Person>
et Jersey fait de son mieux pour transformer en XML, en l'enveloppant dans <people>
. Vous ne l'avez pas dit à utiliser la classe wrapper People
, et il n'a aucun moyen de deviner que pour lui-même.
Si vous voulez générer l'élément wrapper <People>
, alors vous devez donner la classe wrapper People
:
@GET
@Path("/TheListOfPeople")
public People getListOfPeople() {
People people = new People();
people.getPerson().addAll(dao.getList()); // or something like it
return people ;
}