Bonjour,
J'ai un XSD de ce type :
Je génère le code via xjc, rien de particulier à faire.
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 <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="TEST"> <xs:complexType> <xs:sequence> <xs:element name="BASE" maxOccurs="unbounded" minOccurs="0"> <xs:complexType mixed="true"> <xs:sequence> <xs:element type="xs:string" name="Champ1"/> <xs:element name="Champ2TypeComplex"> <xs:complexType> <xs:sequence> <xs:element type="xs:string" name="ChampListe" maxOccurs="unbounded" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Je tente ensuite de créer un fichier xml comme suit :
Le problème, c'est que je ne peux pas ajouter le "champ2" dans la liste base1Content car ce n'est pas serializable.
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 package test_jaxb; import java.io.Serializable; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import test_jaxb.TEST.BASE; import test_jaxb.TEST.BASE.Champ2TypeComplex; public class Main { /** * @param args */ public static void main(String[] args) throws JAXBException { ObjectFactory factory = new ObjectFactory(); TEST test = factory.createTEST(); BASE base = factory.createTESTBASE(); test.getBASE().add(base); List<Serializable> base1Content = base.getContent(); JAXBElement<String> champ1 = factory.createTESTBASEChamp1("champ1"); String text = "du texte"; base1Content.add(text); base1Content.add(champ1); Champ2TypeComplex champ2 = factory.createTESTBASEChamp2TypeComplex(); List<String> champ2list = champ2.getChampListe(); champ2list.add("champ2list 1"); champ2list.add("champ2list 2"); champ2list.add("champ2list 3"); base1Content.add(champ2); JAXBContext context = JAXBContext.newInstance("test_jaxb"); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty("jaxb.formatted.output",Boolean.TRUE); marshaller.marshal(test,System.out); } }
La question est donc : Que faire pour générer un mes classes et prendre en compte ce cas particulier d'un element "ComplexType" dans un element avec mixed=true.
La solution générée par Jaxb implique d'ajouter dans une liste "serializable" les éléments pour le "mixed=true". Mais bien entendu le type Champ2TypeComplex que l'on doit ajouter dedans n'est pas "serializable".
J'espère avoir été assez clair. merci.
Partager