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 objet, qui est pas un objet populaire. J'objectent a une liste interne.

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 aux personnes dans le fichier XML. En outre, l'élément est "People" (P majuscule) non "personnes" (P minuscules). On dirait que ce n'est pas vraiment en utilisant le XSD du tout.

EDIT Ceci est en quelque sorte lié à cette question: JAXB Collections (Liste ) Utilisez Pascal cas au lieu de CamelCase pour l'élément noms

Était-ce utile?

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 ;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top