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] ArrayList n'est pas pris en charge que ce soit en entrée ou en sortie de méthode.


Sujet :

Services Web Java

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut [JAX WS] ArrayList n'est pas pris en charge que ce soit en entrée ou en sortie de méthode.
    Bonjour,

    Dans mon code source, j'ai beaucoup de classes héritant de collections.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import java.util.ArrayList;
     
    public class Ids extends ArrayList<Id>
    {
       ...
    }
    Et celles là sont utilisées autant en entrée qu'en sortie de mes méthodes de service.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Ids quelsProduits = service.tuVendsQuoi();
    ...
    Ids jeVeuxToutCa = new Ids();
    jeVeuxToutCa.add(....);
     
    service.acheter(jeVeuxToutCa);
    Quand elles sont passées par wsgen/wsimport, ces méthodes voient leurs ArrayList bousillés, si je peux dire:

    Je vais trouver dans le package où mon service est implémenté des classes AbstractCollection, AbstractList, ArrayList, générées par wsimport et voulant remplacer les classes homologues de java.util.
    Mais ces nouvelles classes ne sont en rien des collections: elles n'ont pas de méthode add() ni quoi que ce soit d'autre. Elle n'ont pas d'utilité pour moi, et elles me gênent.

    Que dois-je faire? Créer un adaptateur pour chaque collection que j'ai (un @XmlJavaTypeAdapter) ? Ou ai-je d'autres moyens?

    En vous remerciant,

    Grunt.

  2. #2
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    C'est normal.
    Les WS ne gèrent pas les objets java.

    Il faut un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    implements Serializable
    pour tes classes.


    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Ids extends ArrayList<Id> implements Serializable
    ça devait mieux marcher.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut
    Il n'est pas sérialisable depuis la nuit des temps, ArrayList?
    Car mes objets, eux, le sont.

  4. #4
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Les WS communique en XML. Si tu sérialises pas ton ArrayList, l'XML ne sait pas que c'est un objet java.

    Je sais pas si je répond à ta question.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut
    Ce que je ne comprends pas, c'est pourquoi je devrais ajouter un: implements Serializable sur ma classe qui étend ArrayList,

    alors que d'après http://docs.oracle.com/javase/1.4.2/...ArrayList.html, ArrayList l'implémente déjà?

    Le compilateur en mode strict, va me lâcher un warning: redundant interface disant qu'il sait déjà que cette classe est sérialisable, non?

    Ou alors, ce n'est pas java.io.Serializable qu'il faut implémenter mais un autre, d'un autre package?

  6. #6
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    A ok, je comprend mieux ton problème.

    Moi perso j'ai fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class Ids implements Serializable {
     
    	private static final long serialVersionUID = ...;
     
    	private ton_ArrayList
     
    	private String autre_chose;
     
            getTon_ArrayList(...){...}
            setTon_ArrayList(...){...}
     
            getAutre_chose(...){...}
            setAutre_chose(...){...}
    Tu prends une classe et tu met tout dedans.
    Ton client récupère l'IDS et n'a plus qu'a faire IDS.getTon_ArrayList();

    Si t'as pas de contraintes tu peux faire ça à la limite.

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut
    J'ai réussi à comprendre d'où venait mon problème:
    Il s'agissait d'un Adapter qui générait ces classes lorsqu'il n'aurait pas du.
    Une affaire également, de @XmlType qui manquaient. Je m'étais mis en tête que @XmlRootElement suffisait...

    En tout cas, je te remercie pour ton assistance.
    Je peux enfin m'en aller vers d'autres problèmes...

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

Discussions similaires

  1. [PowerShell] Le format du chemin d'accès n'est pas pris en charge
    Par torrgovin dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 11/07/2012, 00h41
  2. [SQL2005] Le type de Données XML n'est pas pris en charge
    Par oliviera63 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/02/2012, 11h44
  3. Réponses: 1
    Dernier message: 13/07/2010, 18h32
  4. Mon script cron n'est pas pris en compte
    Par tomnie dans le forum Linux
    Réponses: 11
    Dernier message: 31/03/2004, 11h19

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