Extraction d'informations
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:
Code:
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)> |
Voici un exemple de fichier xml:
Code:
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> |
- "events" est ma liste des événements.
- "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.
Code:
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 ..
} |
Lors de l'appel sur :
Code:
1 2 3 4
| @GET
@Path("LIST")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public events getEventsList(); |
J'ai une classe qui me retourne les events. ( J'ai des données instancier ).
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 :
Code:
private List<event> list; par private List<start> list;
et
Code:
public events getEventsList(); par public start getEventsList();
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".
Autre anecdote lorsque je créé une fonction qui me retourne un type d'événement avec comme spec :
Code:
1 2 3 4 5
|
@GET
@Path("EVENT")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public event getEvent(); |
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 .
Merci d'avance.