Problème de mixed content avec un ComplexType à l'intérieur.
Bonjour,
J'ai un XSD de ce type :
Code:
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 génère le code via xjc, rien de particulier à faire.
Je tente ensuite de créer un fichier xml comme suit :
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
| 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);
}
} |
Le problème, c'est que je ne peux pas ajouter le "champ2" dans la liste base1Content car ce n'est pas serializable.
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.