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

Services Web Java Discussion :

<xs:choice> et JAXB


Sujet :

Services Web Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut <xs:choice> et JAXB
    Bonjour,

    je viens vous exposer un problème que je rencontre dans mes balbutiements en WebServices.

    Je dois faire un client d'une WSDL (que je ne peux pas modifier). J'utilise alors la commande wsimport pour générer mes classes.
    Cependant dans le code généré, je me retrouve avec des List<JAXBElement<?>> getDatesAndJournalsAndTexts() qui se trouve être la traduction d'un <xs:choice> qui a à peu de chose près cette tête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xs:complexType name="critiqueType">
    <xs:sequence>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element name="date" type="xs:dateTime"/>
    <xs:element name="journal" type="xs:string"/>
    <xs:element name="text" type="xs:string"/>
    </xs:choice>
    </xs:sequence>
    </xs:complexType>
    En fait, je m'attendais à avoir une classe contenant 3 attributs (date, journal et text) qui pouvait être null si non présent.

    Plus loin, j'ai un cas similaire qui est aussi traduit de la même façon.

    En investiguant un peu, je suis tombé sur ce lien qui apparemment pouvait résoudre mon problème...
    https://jaxb.dev.java.net/2.1.9/docs...ns.html#simple

    j'ai donc créer un fichier de conf xjb qui a maintenant cette tête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <jxb:bindings version="2.0"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"  
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    >
    	<jxb:globalBindings generateElementProperty="false" >
    	<jxb:javaType name="java.lang.Integer" xmlType="xs:integer" />
    			<xjc:simple />
    	</jxb:globalBindings>
    </jxb:bindings>
    Et j'ai bien sûr indiqué dans la commande wsimport la prise en compte de ce fichier (i.e.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wsimport -b ./ma config.xjb -s WS http://mawsdl.wsdl
    )

    Mais l'effet n'est pas celui escompté puisque j'ai toujours cette List<JAXBElement<?>> ou pire une List<Object> pour mon deuxième cas (pire car je ne peux même plus savoir à quel champ se rapporte la valeur)

    Une des solutions barbares seraient de créer des classes utilitaires pour manipuler aisément les JAXBElement mais elle n'est pas très élégante...

    Avez-vous une idée pour que je puisse traduire ce "choice" d'une façon plus naturelle que cette List<JAXBElement> ?

    Je vous remercie d'avance
    Bonne semaine à tous

  2. #2
    Futur Membre du Club
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    N'ayant pas eu de réponse j'ai continuer à chercher du côté du "custom bindings".
    J'essaie à présent d'isoler le choice et de le traiter à ma façon mais pour le moment pas de succès...

    J'ai par curiosité essayer de générer un client avec Axis et le résultat est celui que je cherche à obtenir (i.e. la séparation des différents attributs)
    Mais malheureusement, l'utilisation génère une erreur.

    Cela me permet de vous montrer ce que je cherche à obtenir avec JAXB

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    /**
     * CritiqueType.java
     *
     * This file was auto-generated from WSDL
     * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
     */
     
    package blablabla.services;
     
    public class CritiqueType  implements java.io.Serializable {
        private java.util.Calendar date;
     
        private java.lang.String journal;
     
        private java.lang.String text;
     
        public CritiqueType() {
        }
     
        public CritiqueType(
               java.util.Calendar date,
               java.lang.String journal,
               java.lang.String text) {
               this.date = date;
               this.journal = journal;
               this.text = text;
        }
     
     
        /**
         * Gets the date value for this CritiqueType.
         * 
         * @return date
         */
        public java.util.Calendar getDate() {
            return date;
        }
     
     
        /**
         * Sets the date value for this CritiqueType.
         * 
         * @param date
         */
        public void setDate(java.util.Calendar date) {
            this.date = date;
        }
     
     
        /**
         * Gets the journal value for this CritiqueType.
         * 
         * @return journal
         */
        public java.lang.String getJournal() {
            return journal;
        }
     
     
        /**
         * Sets the journal value for this CritiqueType.
         * 
         * @param journal
         */
        public void setJournal(java.lang.String journal) {
            this.journal = journal;
        }
     
     
        /**
         * Gets the text value for this CritiqueType.
         * 
         * @return text
         */
        public java.lang.String getText() {
            return text;
        }
     
     
        /**
         * Sets the text value for this CritiqueType.
         * 
         * @param text
         */
        public void setText(java.lang.String text) {
            this.text = text;
        }
     
       [...]
     
    }
    Si quelqu'un a une idée je suis preneur
    Merci

    A+

Discussions similaires

  1. [XSD] Equivalent du <choice> pour les attribut
    Par BigOne55 dans le forum Valider
    Réponses: 6
    Dernier message: 14/03/2014, 19h24
  2. [JAXB][XSD] Problème lors de la génération des classes
    Par charlot44 dans le forum Persistance des données
    Réponses: 4
    Dernier message: 22/06/2005, 16h10
  3. [Débutant(e)] Problème avec JaxB !
    Par garulfo2 dans le forum Persistance des données
    Réponses: 6
    Dernier message: 08/02/2005, 09h28
  4. [Ant]problème avec JAXB et XJC
    Par lili2704 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 08/12/2004, 12h00
  5. [Info][XML] Informations concernant JAXB
    Par sylvain_2020 dans le forum Persistance des données
    Réponses: 2
    Dernier message: 29/11/2004, 22h47

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