alias avec champs identique pour classes differentes
Bonjour,
Je veux sérialiser un fichier XML de ce type :
Code:
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:
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:
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:
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:
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.