Bonjour ,
Je suis débutant dans la technologie JAX-B , je vous pose mon problème de conception :
J'ai ma DTD de mon xml suivant:
Voici un exemple de fichier xml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?xml version="1.0" encoding="ISO-8859-1"?> <!ELEMENT events event* > <!ELEMENT event (start | pause)> <!ELEMENT start (at1)> <!ELEMENT pause (at2)> <!ELEMENT at1 (#PCDATA)> <!ELEMENT at2 (#PCDATA)>- "events" est ma liste des événements.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE events SYSTEM "events.dtd"> <events> <event> <start> <at1>a</at1> </start> </event> <event> <pause> <at2>b</at2> </pause> </event> </events>
- "event" est un type générique (classe interface dans mon code java )
- "start" et "stop" sont tout les deux des types d'événements qui peuvent avoir différents attributs.
Lors de l'appel sur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 @Path("/") public interface event { // récupére le type d'événement public int getType(); } @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "StartMachineImpl",propOrder = {"at1"}) public class start implements event{ private at1; public int getType(){ return 1;} // getter et setter qui vont bien .. } @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "StartMachineImpl",propOrder = {"at2"}) public class pause implements event{ private at2; public int getType(){ return 2;} // getter et setter qui vont bien .. } @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "EventListImpl", propOrder = {"list"}) public class events{ @XmlElementWrapper(name = "events") private List<event> list; // getter et setter qui vont bien .. }
J'ai une classe qui me retourne les events. ( J'ai des données instancier ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 @GET @Path("LIST") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public events getEventsList();
Le fait est que cela ne fonctionne pas l'erreur que j'ai est "1 annotation is incorrect ...." sa aide beaucoup .... .
Mais je pense que mon problème vient de l'interface qui n'appelle pas les classes "start" et "pause" pour retourner du xml car lorsque je remplace :et
Code : Sélectionner tout - Visualiser dans une fenêtre à part private List<event> list; par private List<start> list;dans la classe events et mon autre classe que j'ai pas montrée cela fonctionne trés bien mais je n'ai que des types "start", hors je voudrais avoir toutes les classes qui implementes mon interface "event".
Code : Sélectionner tout - Visualiser dans une fenêtre à part public events getEventsList(); par public start getEventsList();
Autre anecdote lorsque je créé une fonction qui me retourne un type d'événement avec comme spec :
Bien cela créé bien mon événement en xml qu'il soit "start" ou "pause", je ne comprend pas pourquoi sa fonctionne en retournant une instance mais pas avec N instances .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 @GET @Path("EVENT") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public event getEvent();
Merci d'avance.
Partager