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 :

Jax-WS coter client Soap envoyer une List Java du client au serveur (manque du list.add dans génération Jaxb)


Sujet :

Services Web Java

  1. #1
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut Jax-WS coter client Soap envoyer une List Java du client au serveur (manque du list.add dans génération Jaxb)
    Hello,

    j'ai mon service Saop qui envoi des valeurs suivant :
    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
     
    @XmlRootElement(name = "person")
    @XmlType(propOrder = {"id","name","address", "telephones", "telephone2", "durations", "langage"})
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Person {
     
        @XmlElement(required=true)
        public UUID id;
        //public List<UUID> listId;
        private String name;
        private String address;
     
        @XmlJavaTypeAdapter(DurationAdapter.class)
        @XmlElement(name="duration")
        private java.time.Duration durations;
     
        @XmlElementWrapper(name="telephones", nillable=true)
        @XmlElement(name="telephone", required=true, type=Telephone.class)
        public List<Telephone> telephones;
     
     
        private Telephone telephone2;
        private Langage langage;
     
    //Getter setter
    exemple XML :
    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
     
    S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
       <S:Body>
          <ns2:getPersonsResponse xmlns:ns2="http://soa.jaxwslabs.notebookwebserviceexercice6">
             <return>
                <name>Mickael Baron</name>
                <address>Migne-Auxances</address>
                <telephones>
                   <telephone>
                      <codeCountry>+1</codeCountry>
                      <codeRegional>514</codeRegional>
                      <number>571-1289</number>
                   </telephone>
                   <telephone>
                      <codeCountry>+213</codeCountry>
                      <codeRegional>514</codeRegional>
                      <number>999-2609</number>
                   </telephone>
                   <telephone>
                      <codeCountry>+33</codeCountry>
                      <codeRegional>489</codeRegional>
                      <number>777-8888</number>
                   </telephone>
                </telephones>
                <duration>PT2S</duration>
                <langage>JAVA</langage>
             </return>
    ....
    ci-joint mon wsdl.notebookwebservice.xml

    Mon code du Client SOAP: NotebookWebServiceExercice4.zip

    dans le code je veux ajouter des telephones (List<Telephone>) a l'objet Person, mais mon newPerson.setTelephones(.....); prend en paramétré un JAXBElement<Person.Telephones>??? donc je ne voix pas comment lui setter mon List<Telephone>?

  2. #2
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Plus d’information :
    dans client jax-ws, quand mes classe POJO sont générer (avec la définition du wsdl de mon service serveur) j'ai la définition de la classe Person qui est sous cette forme :
    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
     
    public class Person {
     
        @XmlElement(required = true)
        protected String id;
        protected String name;
        protected String address;
     
    /* ******* */
        @XmlElementRef(name = "telephones", type = JAXBElement.class)
        protected JAXBElement<Person.Telephones> telephones;
    /* ******* */
     
        protected Telephone telephone2;
        protected String duration;
        protected Langage langage;
     
    ....
     
        /**
         * Gets the value of the telephones property.
         * 
         * @return
         *     possible object is
         *     {@link JAXBElement }{@code <}{@link Person.Telephones }{@code >}
         *     
         */
        public JAXBElement<Person.Telephones> getTelephones() {
            return telephones;
        }
     
        /**
         * Sets the value of the telephones property.
         * 
         * @param value
         *     allowed object is
         *     {@link JAXBElement }{@code <}{@link Person.Telephones }{@code >}
         *     
         */
        public void setTelephones(JAXBElement<Person.Telephones> value) {
            this.telephones = value;
        }
     
    ...
    //Setter getter
    Cela ne me permet pas donc de fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    telephone = new Telephone();
                    telephone.setCodeCountry("+1"); telephone.setCodeRegional("514"); telephone.setNumber("989-2789");
                    telephones.add(telephone);
    Les objets sont pas les mêmes que mes POJO coter serveur Jax-ws. Alors comme je peu dépasser le problèmes de génération de la List<Telephones> ?? (génération automatique Jaxb selon moi qui cause des problèmes)

  3. #3
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Bonjour a tous, je ne sais pas comment ca fonctionne avec des plugins Maven, mais j'ai trouves cela :
    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
     
            <plugin>
                    <groupId>org.jvnet.jaxb2.maven2</groupId>
                    <artifactId>maven-jaxb2-plugin</artifactId>
                    <version>0.8.3</version>
                    <executions>
                        <execution>
                            <phase>generate-sources</phase>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                            <configuration>
                                <args>
                                    <arg>-enableIntrospection</arg>
                                    <arg>-Xequals</arg>
                                    <arg>-XhashCode</arg>
                                    <arg>-XtoString</arg>
                                    <arg>-Xcollection-setter-injector</arg>
                                    <arg>-no-header</arg>
                                    <arg>-Xfluent-api</arg>
                                    <arg>-Xdefault-value</arg>
                                    <arg>-XJsr303Annotations</arg>
                                </args>
                                ... import des plugins nécessaires à ces arguments
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
    de ce que je voix il faut actives des options entre autre -Xcollection-setter-injector ? quelqu’un pourrai nous fournir un exemple avec cette option.
    Je suis toujours a la recherche de réponses au post que j ai publier précédemment. Merci.

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je pense le forum est présenté des infos d'une exercice ou d'un projet contenant grand nombre de lacune et ce n'est vraiment pas censé comme une critique. Je vais essayer de répondre tant probable et plausible.

    Si je comprends bien, la variable telephones dans la ligne #3 soit établie comme une list simple du type Telephone... et le namespace de person soit null. Voici comment faire à mon sens.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Person newPerson=new Person();
    //...établi d'autre champs etc...
    List<Telephone> telephones=new ArrayList<Telephone>();
     
    Telephone telephone = new Telephone();
    telephone.setCodeCountry("+1");
    telephone.setCodeRegional("514");
    telephone.setNumber("989-2789");
    telephones.add(telephone);
    //etc etc plus de telephone ajoutés...
     
    JAXBElement<Person.Telephones> jaxbTelephones=new JAXBElement<Person.Telephones>(new QName("telephones"), Person.Telephones.class, Person.class, telephones);
    newPerson.setTelephones(jaxbTelephones);
     
    //continue à établir des autres champs...

  5. #5
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    QName qName = new QName("http://soa.jaxwslabs.notebookwebserviceexercice6", "telephones");
                    JAXBElement<Person.Telephones> jaxbTelephones=new JAXBElement<Person.Telephones>(qName
                                                                                                    , telephones.getClass(),
                                                                                                    telephones);
                    newPerson.setTelephones(jaxbTelephones);
    j'ai le message d'erreur a la compilation :
    [ERROR] src/main/java/soa/jaxwslabs/notebookwebserviceexercice4/NotebookWebServiceAsynchronousClient.java:[60,29] incompatible types: java.util.ArrayList<soa.jaxwslabs.notebookwebserviceexercice4.Telephone> cannot be converted to soa.jaxwslabs.notebookwebserviceexercice4.Person.Telephones

  6. #6
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Hello je suis toujours au même point!

    J'arrive pas a envoyer mon objet du client au serveur, j'ai une erreur dans la construction de mon objet (voir post juste ci-dessus) suite au mapping Jaxb avec mon service web Soap (Jax-ws)

Discussions similaires

  1. Capturer les message SOAP envoyé par le code client
    Par jamelledine_med dans le forum Services Web
    Réponses: 3
    Dernier message: 14/07/2010, 10h20
  2. Passage d'un client SOAP de PHP à C
    Par olivier857 dans le forum C
    Réponses: 10
    Dernier message: 24/04/2006, 17h05
  3. Compo HTTP et client SOAP webservice ?
    Par Bruno13 dans le forum Web & réseau
    Réponses: 34
    Dernier message: 03/04/2006, 19h09
  4. [ServerSocket] Envoyer un message vers un client
    Par Michel_57 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 07/08/2004, 00h01

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