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

Java Discussion :

Problème de sérialization: setAttribute: Non-serializable attribute


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut Problème de sérialization: setAttribute: Non-serializable attribute
    Bonjour à tous,

    Voilà j'ai un problème un peu bizarre: j'essai de sauvegarder dans ma session une Collection d'objet Serializable et j'ai une erreur indiquant que l'object n'est pas sérializable.

    java.lang.IllegalArgumentException: setAttribute: Non-serializable attribute
    at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1251)
    at org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:129)
    at ....

    Pourtant, il s'agit d'une collection d'objet dont les attributs sont uniquement de type String et boolean.

    Avez vous une idée de problème possible?
    J'utilise la JVM 1.4_10 de Sun.

    Merci d'avance.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut
    Après une petite recherche, il se pourrait que ce soit juste un bug de la librairie :
    http://osdir.com/ml/java.jasig.cas.u.../msg00053.html

    Ensuite, un autre problème pourrait intervenir si tu as une balise <distribute/> :

    http://saloon.javaranch.com/cgi-bin/...&f=82&t=002612


    Voilà, voilà, en espérant que ca t'a aidé.

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    On pourrait avoir plus d'info sur l'objet en question et avoir le stacktrace complet de l'exception ?

    a++

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    bien sur:

    Voilà l'objet,

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    import java.io.Serializable;
     
    public class ParticipantVO implements Comparable, Serializable {
     
    	private String id = null ;
    	private String userPseudo = null ;
    	private String userEntreprise = null ;
    	private String userFunction = null ;
    	private String userEmail = null ;
    	private String userFirtName = null ;
    	private String userLastName = null ;
    	private String status = null ;
    	private String participationId = null ;
    	private boolean invitReaded = false ;
    	private boolean invitAccepeted = false ;
    	/**
             * 
             */
    	private static final long serialVersionUID = 2L;
     
    	public int compareTo(Object o) {
    		if( o == null ) throw new NullPointerException();
     
    //		 Compare 2 messages, s'il sont differents, on les tries par date
    		if (o instanceof ParticipantVO) {
    			ParticipantVO sc = (ParticipantVO) o;
     
    			if( sc == this || (sc.getUserPseudo().equals(getUserPseudo()) && sc.getUserEntreprise().equals(getUserEntreprise()) && sc.getUserEmail().equals(getUserEmail()))) return 0 ; // Msg egaux
    			else {
     
    				if( ! sc.getUserPseudo().equals(getUserPseudo()) )
    					return sc.getUserPseudo().compareTo(getUserPseudo()) ;
    				if( !sc.getUserEntreprise().equals(getUserEntreprise()) )
    					return sc.getUserEntreprise().compareTo(getUserEntreprise()) ;
    				if( !sc.getUserEmail().equals(getUserEmail()))
    					return sc.getUserEmail().compareTo(getUserEmail()) ;
     
    				else return 0 ;
    			}
     
     
    		} else 
    			return 1 ;
    	}
     
    	public boolean equals(Object o) {
     
    		if( o == null ) return false;
     
    //		 Compare 2 messages, s'il sont differents, on les tries par date
    		if (o instanceof ParticipantVO) {
    			ParticipantVO sc = (ParticipantVO) o;
     
    			if( sc == this || (sc.getUserPseudo().equals(getUserPseudo()) && sc.getUserEntreprise().equals(getUserEntreprise()) && sc.getUserEmail().equals(getUserEmail()))) 
    				return true ; // Msg egaux
     
    			return false; 
    		} else 
    			return false ;
    	}
     
     
    	public int hashCode() {
     
    		return (getUserEmail() + getUserEntreprise() + getUserPseudo()).hashCode() ;
    	}
     
    ...
    La Stacktrace compète.

    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
    java.lang.IllegalArgumentException: setAttribute: Non-serializable attribute
    	at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1251)
    	at org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:129)
    	at com.wizadeo.portal.front.action.AuctionDispatchAction.selectParticipantByUserInfos(AuctionDispatchAction.java:1571)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:324)
    	at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
    	at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
    	at com.wizadeo.portal.front.action.WizadeoDispatchAction.execute(WizadeoDispatchAction.java:105)
    	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    	at sun.reflect.GeneratedMethodAccessor184.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:324)
    	at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at javax.security.auth.Subject.doAsPrivileged(Subject.java:500)
    	at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
    	at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:245)
    	at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:50)
    	at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:156)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:152)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    	at org.objectweb.jonas.web.catalina55.ResetAuthenticationValve.invoke(ResetAuthenticationValve.java:62)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    	at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
    	at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
    	at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754)
    	at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684)
    	at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    	at java.lang.Thread.run(Thread.java:534)

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    En effet c'est bizarre

    Est-ce que tu ne mettrais pas d'autre objet dans la session ?

    a++

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    Sinon, j'utilise effectivement la balise <distributable/> mais l'enlever est un contournement pas terrible si je veux pouvoir fonctionner en cluster.

    Y a vraiment un truc bizarre car j'ai pas le problème avec d'autre objet.

    Au fait, la collection d'objet est obtenu a partir d'une HashMap ( map.values())

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tipou75 Voir le message
    Au fait, la collection d'objet est obtenu a partir d'une HashMap ( map.values())
    Bingo !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println( new HashMap().values() instanceof Serializable );
    La collection ainsi retourné n'implémente pas Serializable !

    Il faut donc que tu crées une instance d'une collection Serializable, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collection<ParticipantVO> c = new ArrayList<ParticipantVO>(map.values());
    a++

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    Haaaaa!!! Merci!

    Comme quoi ce qui parait évident, ne l'ai jamais...
    Celle là, je m'en souviendrai

    A+
    et merci à tous

Discussions similaires

  1. problème Non-serializable object
    Par laurent.c123 dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2008, 13h36
  2. Problème d'évenement ! Fermeture non demandée.
    Par killprog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/02/2006, 10h18
  3. Problème (éviter des caractères non voulu)
    Par Le Rebel dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 13h30
  4. Réponses: 1
    Dernier message: 25/11/2005, 20h40
  5. Problème avec des composants non déclarés
    Par vbcasimir dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/01/2005, 11h17

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