Foros del Web » Programación para mayores de 30 ;) » Java »

Spring -> java.io.NotSerializableException

Estas en el tema de Spring -> java.io.NotSerializableException en el foro de Java en Foros del Web. Hola!! Estoy realizando una aplicación con Maven, Spring, Hibernate y JSF, en Netbeans y Tomcat. Primero trato de que me muestre el contenido de la ...
  #1 (permalink)  
Antiguo 12/09/2012, 06:13
 
Fecha de Ingreso: mayo-2012
Mensajes: 26
Antigüedad: 11 años, 11 meses
Puntos: 0
Spring -> java.io.NotSerializableException

Hola!!

Estoy realizando una aplicación con Maven, Spring, Hibernate y JSF, en Netbeans y Tomcat.

Primero trato de que me muestre el contenido de la tabla idiomas, pero... me muestra la tabla vacía y en el log me da el siguiente error:

Advertencia: No puedo serializar atributo de sesión idiomas para sesión 84D59D5970C25016330AFD0328F242D9

java.io.NotSerializableException: model.bo.imp.IdiomasBo

at java.io.ObjectOutputStream.writeObject0(ObjectOutp utStream.java:1180)
at java.io.ObjectOutputStream.defaultWriteFields(Obje ctOutputStream.java:1528)
at java.io.ObjectOutputStream.writeSerialData(ObjectO utputStream.java:1493)
at java.io.ObjectOutputStream.writeOrdinaryObject(Obj ectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutp utStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutpu tStream.java:346)
at org.apache.catalina.session.StandardSession.writeO bject(StandardSession.java:1671)
at org.apache.catalina.session.StandardSession.writeO bjectData(StandardSession.java:1077)
at org.apache.catalina.session.StandardManager.doUnlo ad(StandardManager.java:432)
at org.apache.catalina.session.StandardManager.unload (StandardManager.java:353)
at org.apache.catalina.session.StandardManager.stopIn ternal(StandardManager.java:518)
at org.apache.catalina.util.LifecycleBase.stop(Lifecy cleBase.java:232)
at org.apache.catalina.core.StandardContext.stopInter nal(StandardContext.java:5462)
at org.apache.catalina.util.LifecycleBase.stop(Lifecy cleBase.java:232)
at org.apache.catalina.core.StandardContext.reload(St andardContext.java:3901)
at org.apache.catalina.manager.ManagerServlet.reload( ManagerServlet.java:949)
at org.apache.catalina.manager.ManagerServlet.doGet(M anagerServlet.java:360)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:210)
at org.netbeans.modules.web.monitor.server.MonitorFil ter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:210)
at org.apache.catalina.filters.SetCharacterEncodingFi lter.doFilter(SetCharacterEncodingFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBas e.invoke(AuthenticatorBase.java:581)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(A ccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.p rocess(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnect ionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProce ssor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)



IdiomasBo:
Cita:
public class IdiomasBo implements IIdiomasBo {

private IdiomasDao idiomasDao;

public void setIdiomasDao (IdiomasDao idiomasDao) {
this.idiomasDao = idiomasDao;
}

public IdiomasDao getIdiomasDao() {
return idiomasDao;
}

public List<Idiomas> getListaIdiomas() {
return this.idiomasDao.getListaIdiomas();
}
}
IdiomasDao:
Cita:
public class IdiomasDao extends HibernateDaoSupport implements IIdiomasDao{

//Al finalizar, cerramos la session
protected void finalize() {
HibernateUtil.getSessionFactory().close();
}

public List<Idiomas> getListaIdiomas() {
List<Idiomas> listaIdiomas = new ArrayList<Idiomas>();
Session session = HibernateUtil.getSessionFactory().getCurrentSessio n();
try {
session.beginTransaction();
Criteria criteria = session.createCriteria(Idiomas.class);
listaIdiomas = criteria.list();
session.getTransaction().commit();
} catch (Exception ex) {
Logger.getLogger(IdiomasDao.class.getName()).log(L evel.SEVERE,"Problema al obtener la lista de Idiomas");
session.getTransaction().rollback();
}
return listaIdiomas;
}
}
idiomasBean.java:
Cita:
public class IdiomasBean implements Serializable {

//Algunos atributos para la presentación
private List<Idiomas> listaIdiomas;
private HtmlDataTable tablaIdiomas;
private boolean seleccion;

private Integer ididioma;
private String nombre;
private String name;

//DI via Spring
private IdiomasBo idiomasBo;


public void setIdiomasBo (IdiomasBo idiomasBo) {
this.idiomasBo = idiomasBo;
}

public IdiomasBo getIdiomasBo () {
return idiomasBo;
}

public void setTablaIdiomas (HtmlDataTable tablaIdiomas) {
this.tablaIdiomas = tablaIdiomas;
}

public HtmlDataTable getTablaIdiomas () {
return tablaIdiomas;
}

public String getNombre() {
return this.nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

public List<Idiomas> getListaIdiomas() {
listaIdiomas = idiomasBo.getListaIdiomas();
return listaIdiomas;
}

public void seleccionLista() {
}

public void limpiarForm() {
this.setNombre("");
this.setName("");
}

}
index.xhtml:
Cita:
<h:form>
<p:dataTable id="table2" value="#{idiomas.listaIdiomas}" var="idiomas" paginator="true" rows="5" dynamic="true" >
<f:facet name="header">
IDIOMAS
</f:facet>
<p:column>
<f:facet name="header">
<h:outputText value="Nombre"/>
</f:facet>
<h:outputText value="#{idiomas.nombre}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Name"/>
</f:facet>
<h:outputText value="#{idiomas.name}"/>
</p:column>
</p:dataTable>
</h:form>

Alguna idea de cómo solucionarlo??

Muchas gracias!!
  #2 (permalink)  
Antiguo 12/09/2012, 12:58
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Spring -> java.io.NotSerializableException

http://docs.oracle.com/javase/6/docs...va.lang.Object)

Cita:
Throws:
InvalidClassException - Something is wrong with a class used by serialization.
NotSerializableException - Some object to be serialized does not implement the java.io.Serializable interface.
IOException - Any exception thrown by the underlying OutputStream.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 13/09/2012, 03:03
 
Fecha de Ingreso: mayo-2012
Mensajes: 26
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Spring -> java.io.NotSerializableException

Muchas gracias por la respuesta!!!

En el faces-config.xml tengo:

Cita:
<!-- Definimos el bean que va a trabajar con la aplicación que tiene asociada la
clase IdiomasBean y seteamos el atributo (property) idiomasBo-->
<managed-bean>
<managed-bean-name>idiomas</managed-bean-name>
<managed-bean-class>brany.spring.managedBean.IdiomasBean</managed-bean-class>

<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>idiomasBo</property-name>
<value>#{idiomasBo}</value>
</managed-property>
</managed-bean>

idiomas es del tipo IdiomasBean (que si que está implementado como serializable).

Soy novato y lo hice siguiendo este manual (que está muy bien):
http://yasnameza.files.wordpress.com/2011/07/spring-hibernate-jsf.pdf

Según el cual (y otros ejemplos que he visot)... IdiomasBo no tiene porque implementar Serializable...


Ves alguna posible solución??

Gracias
  #4 (permalink)  
Antiguo 13/09/2012, 04:52
 
Fecha de Ingreso: mayo-2012
Mensajes: 26
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Spring -> java.io.NotSerializableException

He leído que todos los atributos de una clase Serializable tienen que ser serializables:
Como IdiomasBean tiene un atributo IdiomasBo, e IdiomasBo tiene un atributo IdiomasDao... probé a poner IdiomasBo e IdiomasDao como Serializables, (también, de casualidad, había comentado el HtmlDataTable (el cual no es Serializable)), en este caso me daba el error:

Cita:
Grave: Context initialization failed
org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/InvalidMappingException

Caused by: java.lang.NoClassDefFoundError: org/hibernate/InvalidMappingException

Caused by: java.lang.ClassNotFoundException: org.hibernate.InvalidMappingException
También he probado a simplemente quitar los HtmlDataTable. En este caso, me da el siguiente error:

Cita:
sep 13, 2012 12:28:50 PM org.apache.catalina.loader.WebappClassLoader findResourceInternal
Grave: Error de lectura de recurso: No pude cargar javax.faces.validator.RegexValidator.
java.util.zip.ZipException: ZIP_Read: error reading zip file
at java.util.zip.ZipFile.read(Native Method)
at java.util.zip.ZipFile.access$1400(ZipFile.java:56)
at java.util.zip.ZipFile$ZipFileInputStream.read(ZipF ile.java:677)
at java.util.zip.ZipFile$ZipFileInflaterInputStream.f ill(ZipFile.java:413)
at java.util.zip.InflaterInputStream.read(InflaterInp utStream.java:158)
at org.apache.catalina.loader.WebappClassLoader.findR esourceInternal(WebappClassLoader.java:3157)
....
El cuál voy a empezar a buscar a ver si encuentro algo... Si se te ocurre algo... me avisas ;)

Gracias por todo!!
  #5 (permalink)  
Antiguo 13/09/2012, 05:20
 
Fecha de Ingreso: mayo-2012
Mensajes: 26
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Spring -> java.io.NotSerializableException

Bueno... tras hacer un clean... si IdiomasBo e IdiomasDao no implementan Serializable... me vuelve a dar solamente el error inicial: java.io.NotSerializableException: model.bo.imp.IdiomasBo
  #6 (permalink)  
Antiguo 13/09/2012, 05:37
 
Fecha de Ingreso: mayo-2012
Mensajes: 26
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Spring -> java.io.NotSerializableException

Resumiendo:

Tras hacer el clean con IdiomasDao e IdiomasBo Serializable y sin HtmlDataTable.

No me da ningún error, pero la tabla me la pinta sin ningún dato de la BD, y la conexión con la BD está bien, porque seguido muestro otra tabla sin usar Spring (con JSF e Hibernate) y la muestra correctamente.

El final del log es:
Cita:
Información: building session factory
sep 13, 2012 1:26:33 PM org.hibernate.impl.SessionFactoryObjectFactory addInstance
Información: Not binding factory to JNDI, no JNDI name configured
Hibernate: select this_.ididioma as ididioma102_0_, this_.nombre as nombre102_0_, this_.name as name102_0_ from aaplicacion.idiomas this_
Hibernate: select this_.ididioma as ididioma102_0_, this_.nombre as nombre102_0_, this_.name as name102_0_ from aaplicacion.idiomas this_
Alguna idea de como solucionarlo??

Gracias!!

Etiquetas: serializar, spring
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:38.