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 :

Axis Fault : could not find deserializer for type


Sujet :

Services Web Java

  1. #1
    Membre du Club Avatar de hadler
    Inscrit en
    Décembre 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2004
    Messages : 91
    Points : 63
    Points
    63
    Par défaut Axis Fault : could not find deserializer for type
    Bonjour à tous,

    Je débute avec les webservices, et je suis bloqué depuis un moment sur un obstacle qui me paraît insurmontable.

    J'utilie Axis 1.4 sous eclipse, et avec un serveur jboss.

    J'ai débuter avec des tutos trouvés sur le net (celui de jmdoudou pour ne pas le citer) et j'ai fais un webservice qui fait un simple calcul. Jusque là, aucun problème.

    J'ai ensuite ajouter une méthode qui a comme type de retour une classe que j'ai créé, et là c'est le clash.

    j'ai toujours la même exception à l'exécution de mon webservice :
    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
    AxisFault
     faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
     faultSubcode: 
     faultString: org.xml.sax.SAXException: Deserializing parameter 'getDocReturn':  could not find deserializer for type {http://test.ws.com}WsResponse
     faultActor: 
     faultNode: 
     faultDetail: 
    	{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: Deserializing parameter 'getDocReturn':  could not find deserializer for type {http://test.ws.com}WsResponse
    	at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:277)
    	at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
    	at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
    	at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
    	at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:345)
    	at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
    	at org.apache.axis.client.Call.invoke(Call.java:2467)
    	at org.apache.axis.client.Call.invoke(Call.java:2366)
    	at org.apache.axis.client.Call.invoke(Call.java:1812)
    	at org.apache.axis.client.Call.invoke(Call.java:1727)
    	at be.fgov.minfin.drmc.WebService.execute(WebService.java:33)
    	at be.fgov.minfin.drmc.TestEcmWsCorpse.connect(TestEcmWsCorpse.java:53)
    	at be.fgov.minfin.drmc.TestEcmWsCorpse.testCalculator(TestEcmWsCorpse.java:33)
    	at be.fgov.minfin.drmc.TestEcmWsCorpse.main(TestEcmWsCorpse.java:23)
     
    	{http://xml.apache.org/axis/}hostname:CZC7180S54
     
    org.xml.sax.SAXException: Deserializing parameter 'getDocReturn':  could not find deserializer for type {http://test.ws.com}WsResponse
    	at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
    	at org.apache.axis.client.Call.invoke(Call.java:2470)
    	at org.apache.axis.client.Call.invoke(Call.java:2366)
    	at org.apache.axis.client.Call.invoke(Call.java:1812)
    	at org.apache.axis.client.Call.invoke(Call.java:1727)
    	at be.fgov.minfin.drmc.WebService.execute(WebService.java:33)
    	at be.fgov.minfin.drmc.TestEcmWsCorpse.connect(TestEcmWsCorpse.java:53)
    	at be.fgov.minfin.drmc.TestEcmWsCorpse.testCalculator(TestEcmWsCorpse.java:33)
    	at be.fgov.minfin.drmc.TestEcmWsCorpse.main(TestEcmWsCorpse.java:23)
    Caused by: org.xml.sax.SAXException: Deserializing parameter 'getDocReturn':  could not find deserializer for type {http://test.ws.com}WsResponse
    	at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:277)
    	at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
    	at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
    	at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
    	at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:345)
    	at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
    	at org.apache.axis.client.Call.invoke(Call.java:2467)
    	... 7 more
    Voici la classe que je souhaite renvoyer
    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
    package com.ws.test;
     
    import java.util.HashMap;
     
    import javax.xml.rpc.encoding.Serializer;
     
    public class WsResponse implements Serializer {
     
    	public String getMechanismType() {
    		return null;
    	}
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	private String project ;
    	private HashMap<String, Object> map ;
     
    	public WsResponse() {}
     
    	public HashMap<String, Object> getMap() {
    		return map;
    	}
     
    	public void setMap(HashMap<String, Object> map) {
    		this.map = map;
    	}
     
    	public String getProject() {
    		return project;
    	}
     
    	public void setProject(String project) {
    		this.project = project;
    	}
     
    	public static long getSerialVersionUID() {
    		return serialVersionUID;
    	}
     
     
    }
    Mon webservice
    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
    package com.ws.test;
     
    import java.util.HashMap;
     
    public class EcmWs {
     
    	public String getDocument (
    			String project, 
    			String authenticationCode, 
    			String sessionTimeCode, 
    			String queryName, 
    			HashMap<String, String> queryParameters,
    			String sessionHashCode, 
    			boolean isDisplayable) 
    	{
    		return 	"projet : " + project +
    				"\nAuthentication code : " + authenticationCode +
    				"\nSession time code : " + sessionTimeCode +
    				"\nQuery : " + queryName +
    				"\nParameters : " + queryParameters +
    				"\nHash Code : " + sessionHashCode +
    				"\n display the document : " + isDisplayable ;
    	}
     
    	public WsResponse getDoc (
    			String project, 
    			String authenticationCode, 
    			String sessionTimeCode, 
    			String queryName, 
    			HashMap<String, String> queryParameters,
    			String sessionHashCode, 
    			boolean isDisplayable) 
    	{
    		HashMap<String, Object> map = new HashMap<String, Object>() ;
    		map.put("projet", project) ;
    		map.put("Authentication code", authenticationCode) ;
    		map.put("Session time code", sessionTimeCode) ;
    		map.put("Query", queryName) ;
    		map.put("Parameters", queryParameters) ;
    		map.put("Hash Code", sessionHashCode) ;
    		map.put("display", isDisplayable) ;
     
    		WsResponse response = new WsResponse() ;
    		response.setMap(map) ;
    		return 	response ;
    	}
    }
    Je ne comprend pas du tout ce que je dois faire pour pouvoir renvoyer mon objet WsResponse, et tous les tutos que je trouve sur le net ne traite que de webservice simple.

    Quelqu'un peut il m'aider ou me mettre sur le bon chemin ?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 17
    Points
    17
    Par défaut J'ai le même pb
    Voir la discussion que j'ai posée ci-dessous
    Le pb vient de HashMap<String, Object> qui n'est pas sérialisé par Axis. Comme les Liste les vecteurs etc.

    J'aimerai savoir si il y a une solution !! Mais je commence à penser qu'avec Axis qui est tout de même bien pratique ce n'est pas possible.

    Je sait que c'est possible de transmettre des List par web service. Voir l'excellent tuto de Tahé : tutoriel-webservice-netbeans65-glassfish

    Il faut peut être changer d'outil. La question que j'ai poser sur le forum c'est prendre quelle solution sous éclipse ?

  3. #3
    Membre du Club Avatar de hadler
    Inscrit en
    Décembre 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2004
    Messages : 91
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par toprider Voir le message
    Le pb vient de HashMap<String, Object> qui n'est pas sérialisé par Axis. Comme les Liste les vecteurs etc.
    Le problème ne vient pas du tout des HashMap<String, Object> mais bien de mon objet WsResponse.

    Si mon webservice renvoi un HashMap<String, Object>, je n'ai aucune erreur. Pour autant, bien entendu, que le HashMap ne contienne que des objets Serializable.

  4. #4
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par toprider Voir le message
    Voir la discussion que j'ai posée ci-dessous
    Le pb vient de HashMap<String, Object> qui n'est pas sérialisé par Axis. Comme les Liste les vecteurs etc.

    J'aimerai savoir si il y a une solution !! Mais je commence à penser qu'avec Axis qui est tout de même bien pratique ce n'est pas possible.

    Je sait que c'est possible de transmettre des List par web service. Voir l'excellent tuto de Tahé : tutoriel-webservice-netbeans65-glassfish

    Il faut peut être changer d'outil. La question que j'ai poser sur le forum c'est prendre quelle solution sous éclipse ?
    Oui tu as raison le problème vient sans doute d'Axis1.
    Pour remedier le prob il faut soit:
    • retourner un tableau d'objet au lieu de la collection HashMap
    • sion il faut utiliser Axis2 ou JAX-WS(recommendé pour les types complexes)

  5. #5
    Membre du Club Avatar de hadler
    Inscrit en
    Décembre 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2004
    Messages : 91
    Points : 63
    Points
    63
    Par défaut
    En fait, j'ai résolu mon problème en abandonnant Axis et en utilisant Cxf.

    J'ai mis moins d'une heure pour paramétrer mon webservice avec cxf et tout fonctionne comme je le voulais.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 10/12/2014, 15h26
  2. Réponses: 0
    Dernier message: 24/08/2012, 07h21
  3. log4j:ERROR Could not find value for key log4j.appender
    Par quiquekoi dans le forum Logging
    Réponses: 0
    Dernier message: 28/07/2010, 09h26
  4. Réponses: 2
    Dernier message: 12/04/2010, 17h47
  5. ADF : Could not find renderer for
    Par eric95 dans le forum JSF
    Réponses: 11
    Dernier message: 22/11/2006, 09h09

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