Bonjour,

Je veux sérialiser un fichier XML de ce type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
<LIST>
  <A>
    <C1></C1>
    <C2></C2>
  </A>
  <B>
    <C1></C1>
    <C2></C2>
  </B>
</LIST>
Mon code java :
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
 
XStream x = new XStream(new DomDriver());
		// class mapping
		x.alias("LIST", List.class);
		x.alias("A", A.class);
		x.alias("B", B.class);
 
		x.addImplicitCollection(List.class, "as");
		x.addImplicitCollection(List.class, "bs");
 
		x.aliasField("C1", A.class, "c1");
		x.aliasField("C2", A.class, "c2");
		x.aliasField("C1", B.class, "c1");
		x.aliasField("C2", B.class, "c2");
 
		List list = (List) x.fromXML(xml);
 
		System.out.println(list.toString());
Class List :
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
public class List {
 
	private List<A> as = new ArrayList<A>();
	private List<B> bs = new ArrayList<B>();
 
 
	public MPMAccessList(List<A> as, List<B> bs) {
		super();
		this.as = as;
		this.bs = bs;
	}
	public MPMAccessList() {
		super();
		// TODO Auto-generated constructor stub
	}
	public List<A> getas() {
		return as;
	}
	public void setas(List<A> as) {
		this.as = as;
	}
	public List<B> getbs() {
		return bs;
	}
	public void setbs(List<B> bs) {
		this.bs = bs;
	}
	@Override
	public String toString() {
		StringBuilder s = new StringBuilder();
		s.append(" to delete : ");
		if (as != null) {
			for (A td : as) {
				s.append("\n\t");
				s.append(td.toString());
			}
		} else {
			s.append(" List null");
		}
		s.append("\n to record : ");
		if (bs != null) {
			for (B tr : bs) {
				s.append("\n\t");
				s.append(tr.toString());
			}
		} else {
			s.append(" List null");
		}
		return s.toString();
	}
}
Classe A et B (identiques au nom près) :

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
34
35
36
37
38
 
public class A {
 
	private String c1;
	private String c2;
 
	public A() {
		super();
	}
 
	public A(String c1, String c2) {
		super();
		this.c1 = c1;
		this.c2 = c2;
	}
	public String getc1() {
		return c1;
	}
	public void setc1(String c1) {
		this.c1 = c1;
	}
	public String getc2() {
		return c2;
	}
	public void setc2(String c2) {
		this.c2 = c2;
	}
 
	@Override
	public String toString() {
		StringBuilder st = new StringBuilder();
		st.append("c2 = ");
		st.append(c2);
		st.append(", c1 = ");
		st.append(c1);
		return st.toString();
	}
}
L'erreur survient quand je fais un list.toString :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
java.lang.ClassCastException: project.bean.A cannot be cast to project.bean.B
	at project.bean.List.toString(List.java:51)
C'est la ligne suivante :

D'après ce que j'ai compris, tout les champs C1 et C2 du xml d'entrée sont associée aux attributs c1 et c2 de la classe A sans distinction de balise parente. Y'a t-il moyen de spécifier dans quel cas associer C1 à A.c1 ou a B.c1?

Merci d'avance.