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 : 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)>
Voici un exemple de fichier xml:
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>
- "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 : 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 ..
}
Lors de l'appel sur :
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();
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 : Sélectionner tout - Visualiser dans une fenêtre à part
 private List<event> list; par private List<start> list;
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
  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 : 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();
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.