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 :

Mes méthodes ont des java.util.Locale en argument, et il n'existe pas de constructeur Locale(). Que faire?


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 Mes méthodes ont des java.util.Locale en argument, et il n'existe pas de constructeur Locale(). Que faire?
    Bonjour,

    Je suppose que ce qui m'arrive est un grand classique.

    Mes méthodes de service ont toutes des objets Locale (plus précisément Locales extends Vecteur<Locale>) en argument pour préciser celles qu'elles doivent de préférence employer lorsqu'elles mettent en œuvre différents sous-services.

    Lorsque je demande à générer un WSDL par wsgen, je reçois un message d'erreur qui dénonce l'absence de constructeur sans argument dans cette classe java.util.Locale.

    Quelles solutions ai-je pour me sortir de ce problème?

    En vous remerciant,

    Grunt.

  2. #2
    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
    Je vais apporter une partie de la réponse, car cette question était un peu trop complexe et spécifique pour recevoir une réponse sur le forum, je m'en rends compte.

    J'ai annoté ma classe Locales ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @XmlJavaTypeAdapter(LocalesWSAdapter.class)
    public class Locales extends Vector<Locale>
    Et j'ai déclaré un adaptateur ensuite:
    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
    /**
     * Adaptateur pour classe Locales.
     */
    public class LocalesWSAdapter extends XmlAdapter<Vector<String[]>, Locales>
    {
       /**
        * Marshalling.
        * @param source Source à convertir en objet compatible Web Service.
        */
       public Vector<String[]> marshal(Locales locales) throws Exception
       {
          // Chaque entrée de la liste sera une entrée de vecteur.
          Vector<String[]> cible = new Vector<String[]>();
     
          for(Locale locale : locales)
             cible.add(new String[] {locale.getLanguage(), locale.getCountry(), locale.getVariant()});
     
          return cible;
       }
     
       /**
        * Unmarshalling.
        * @param source Source compatible Web Service à convertir en objet cible.
        */
       public Locales unmarshal(Vector<String[]> source) throws Exception
       {
          // Chaque série de String[] sera convertie en une locale.
          Locales cible = new Locales();
     
          for(String[] entrée : source)
             cible.add(new Locale(entrée[0], entrée[1], entrée[2]));
     
          return cible;
       }
    }
    Mais je ne suis pas au bout de mes problèmes, car le wsimport n'aboutit pas à ce que j'attends.

    Par exemple, l'interface d'un de mes services, annotée @WebService et ce service soumis à wsgen, énumère parmi les méthodes, celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Nom[] obtenirListeJournauxCorrectionsAutomatiques(Locales locales, UVId idUV, SujetId idSujet) throws ListeFichiersException;

    Mais ma génération finale aboutit à cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public interface JournauxPortType {
        // [...]
        public List<Nom> obtenirListeJournauxCorrectionsAutomatiques(
            @WebParam(name = "arg0", targetNamespace = "")
            Vector arg0,
            @WebParam(name = "arg1", targetNamespace = "")
            UvId arg1,
            @WebParam(name = "arg2", targetNamespace = "")
            SujetId arg2)
            throws ListeFichiersException;
        // [...]
    }
    où Vector, le type de transport, m'est proposé en lieu et place du type Locales que je souhaiterais utiliser côté client. Et List<Nom> remplace Nom[] que j'attendais en retour.

  3. #3
    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
    Salut

    Peut-être que je vais dire une bêtise mais ton problème me rappel un peu le manque de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    implements Serializable
    dans le code.

    Les WS gèrent très mal les objets java (Hashmap par exemple) et il faut les sérialiser pour que ça ne plante pas.

    Au pire ça ne coute rien d'essayer.

Discussions similaires

  1. Réponses: 12
    Dernier message: 28/02/2014, 10h27
  2. Réponses: 6
    Dernier message: 27/02/2014, 12h06
  3. Réponses: 3
    Dernier message: 13/04/2010, 12h39
  4. java.util.zip chemin des fichiers dans l'archive ZIP
    Par Bubu017 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 15/04/2008, 17h36
  5. [JNI] Java ne trouve pas mes méthodes natives
    Par carotte31 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 14/06/2006, 21h47

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