Bonjour,
Je veux sérialiser un fichier XML de ce type :
Mon code java :
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>
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 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());
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
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(); } }
L'erreur survient quand je fais un list.toString :
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(); } }
C'est la ligne suivante :
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)
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?
Code : Sélectionner tout - Visualiser dans une fenêtre à part for (B tr : bs) {
Merci d'avance.
Partager