IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Problème de mixed content avec un ComplexType à l'intérieur. [JAXB]


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème de mixed content avec un ComplexType à l'intérieur.
    Bonjour,

    J'ai un XSD de ce type :

    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 génère le code via xjc, rien de particulier à faire.

    Je tente ensuite de créer un fichier xml comme suit :

    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);
    	}
     
    }
    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.
    Dernière modification par Robin56 ; 11/01/2013 à 17h32. Motif: Utilisation des préfixes

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    [1] Pour la section de code correspondante, on peut faire plutôt comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            //Champ2TypeComplex champ2 = factory.createTESTBASEChamp2TypeComplex();
            Champ2TypeComplex champ2 = new Champ2TypeComplex();
            List<String> champ2list = champ2.getChampListe();
            champ2list.add("champ2list 1");
            champ2list.add("champ2list 2");
            champ2list.add("champ2list 3");
     
            base1Content.add(factory.createTESTBASEChamp2TypeComplex(champ2));
    [2]
    JAXBContext context = JAXBContext.newInstance("test_jaxb");
    Je n'ai pas bien compris de quoi il s'agit "test_jaxb"; mon intuition pour les cas d'habitude est TEST.class.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            JAXBContext context = JAXBContext.newInstance(TEST.class);

  3. #3
    Invité
    Invité(e)
    Par défaut
    Pour le 1, merci je n'ai même pas pensé à essayer ça mais ça marche.

    Pour le deux, c'est juste le nom du package.

  4. #4
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Pour le deux, c'est juste le nom du package.
    C'est vrai - je n'y ai pas fait attention!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème création de DLL avec CString
    Par loupdeau dans le forum MFC
    Réponses: 3
    Dernier message: 21/07/2005, 20h55
  2. Problème de requête SQL avec instruction TRANSFORM
    Par Nosper dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/06/2005, 16h15
  3. Problème de connexion WMI avec Windows XP
    Par Against Me! dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 24/05/2005, 09h28
  4. Problème de basckup Restore avec IBCONSOLE
    Par myseb dans le forum Outils
    Réponses: 10
    Dernier message: 04/11/2004, 14h48
  5. problème de capture son avec Directshow
    Par albator83 dans le forum DirectX
    Réponses: 2
    Dernier message: 06/11/2003, 17h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo