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 :

[Webservice]java.io.IOException: No serializer found


Sujet :

Services Web Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 8
    Points
    8
    Par défaut [Webservice]java.io.IOException: No serializer found
    Bonjour,
    je suis entrain de faire un webservice en Java avec Axis/TomCat.
    Je voudrais qu'une méthode renvoi un objet perso.
    voici l'appel dans mon webservice:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public MaClasse classe(){
    		return new MaClasse("toto", "tata");
    	}
    Et ma classe:
    public class MaClasse {

    private final String toto;
    private final String tata;

    public MaClasse(String toto, String tata){
    this.toto = toto;
    this.tata = tata;
    }
    }
    C'est une classe de test assez simple.
    Quand j'appel ma méthode (http://localhost:8080/axis/mysqljavaws.jws?method=classe)
    Voici ceux que m'affiche le navigateur:

    Sorry, something seems to have gone wrong... here are the details:

    Fault - ; nested exception is:
    java.io.IOException: No serializer found for class webservice.test.MaClasse in registry org.apache.axis.encoding.TypeMappingDelegate@7b1641

    AxisFault
    faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
    faultSubcode:
    faultString: java.io.IOException: No serializer found for class webservice.test.MaClasse in registry org.apache.axis.encoding.TypeMappingDelegate@7b1641
    faultActor:
    faultNode:
    faultDetail:
    {http://xml.apache.org/axis/}hostname:vilxp

    Qq1 a une idée?

    Vins

    [Modéré par Didier] : ajout de tag dans le titre - Les règles du forum Java

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    bonjour,

    pour pouvoir être échangée une classe doit être serializable.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public class MaClasse implements Serializable { 
    ...
    }

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Ok, bah j'ai fait ça!!!
    Mais ça marche pas pour autant.
    De plus j'ai rencontrer le meme probleme quand j'essai de lui faire envoyer un ResultSet ou un ResultSetMetaData.
    La ça pause vraiment probleme.

  4. #4
    Membre confirmé

    Inscrit en
    Avril 2005
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 317
    Points : 553
    Points
    553
    Par défaut
    Je pense qu'il faut plus regarder dans le retour de tes fonctions.
    Ca me parait difficile de retourner un resultset via un webservice...

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Il est bien possible de retourner un tableau à plusieurs dimensions en Java, et de retourner un DataSet en C#. Il ne doit pas y avoir de problème à ce niveau. Il faut juste trouver comment le sérialiser.

  6. #6
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Bonsoir

    D'après le doc Axis ne peut pas serializer des bean por lesquel un serializer n' est pas enregistré.

    Donc tu dois:
    - modifier ta classe pour ajouter les métodes get/set et avoir un constructeur sans arguments.
    - Faire un déploiement via le descripteur de déploiement Axis et non le jws.
    Willy78

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    hummm...
    Je vais tester ça, sinon tu connais pas autre chose que Axis pour faire un web service qui renvoi n'importe quel instance de classe??

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Bonjour

    Cela n'est pas possible car un service web est lié à un contrat (le fichier wsdl). les types d'arguments et de retour sont définis dans celui-ci via la section types qui est un schéma xml.
    Willy78

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Juste pour dire que je connais actuellement les même problématique.

    En fait je dois effectué une migration de Weblogic vers Tomcat/axis, et je dois avouer que c'est un peut la mémerde

    Sinon pour en revenir a ta question Weblogic fait tout ce que tu demandes avec une simplicité déconcertante, le seul problème : Il est payant

    Bon ben en attendant je vais bidouiller mon wsdd mais si quelqu'un à d'autres précisions je suis preneur.

  10. #10
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Bonjour

    Une solution possible
    Dans les descripteur de déploiement vous devez placer une ligne du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <beanMapping qname="ns:local" xmlns:ns="someNamespace"
        languageSpecificType="java:my.java.thingy"/>
    pour chacune des classes qui doivent être transformées en xml
    Il va de soit que chacune de ces classes doivent être des beans avec les methodes get/set.
    Pour ta classe tu dois avoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <beanMapping qname="ns:maClasse" xmlns:ns="name space cible"
        languageSpecificType="java:my.java.MaClasse"/>
    Ainsi ta classe sera sérializée avec le tag maClasse.
    Si une des propriété de classe n'a pas de correspondance avec un type simple soap (cad le type de retour du get est une autre classe de type bean)
    Tu dois rajouter le mapping pour cette nouvelle classe.

    Cordialement
    Willy78

Discussions similaires

  1. Shell depuis java et IOException
    Par gbruno dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 02/08/2007, 09h26
  2. problème exception java.io.IOException
    Par boulette85 dans le forum Langage
    Réponses: 4
    Dernier message: 01/05/2007, 11h30
  3. [JAVADOC] java.io.IOException classpath
    Par pmartin8 dans le forum ANT
    Réponses: 1
    Dernier message: 13/11/2006, 19h48
  4. Réponses: 5
    Dernier message: 12/12/2005, 13h13
  5. WEB SERVICE No serializer found for class
    Par lch dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 14/09/2005, 16h02

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