java.io.NotSerializableException

Buenas, estoy trabajando con JMS y necesito envia un objeto por mensaje, pero al setearlo (message.setObject(miObjeto);) me envia la siguiente excepcion:

java.io.NotSerializableException: java.io.ByteArrayOutputStream

La clase del objeto en cuestion tiene implementado la interfaz Serializable y contiene los metodos hashCode(), equals() y toString()

¿Cual es el error? ¿Que me hace falta? Agradezco cualquier comentario.

Saludos

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

gráfico

Cuando serializas un objeto, necesitas que todo lo que contiene sea también serializable. Lo que te está ocurriendo es un problema común al serializar y generalmente la causa es algo así:

 

Cuando quieres serializar una instancia de Clase2, te sale esa excepción porque tu objeto contiene una instancia de Clase1, que no es serializable. Hay de dos sopas: te aseguras que todo lo que contiene tu clase implementa Serializable, o marcas los atributos que no deben ser serializables como  .

Gracias

Cuando un atributo se declara como transient este por definicion no se persiste, esto podrias significar que cuando este objeto sea enviando a la cola de mensajes, el consumidor ya no pueda acceder al valor de este atributo transient?

Imagen de Cid

respuesta a transient

Mas bien el significado de poner el modificador   es que el valor de la variable no sera tomado en cuenta (es un valor transitorio, y no importa mucho)para serializar y este no se manda, pero esto no significa que cuando lo deserializas, el objeto que reconstruyes no tenga ese atributo ejemplo:

 

 

Tercera sopa, escribe el

Tercera sopa, escribe el formato de serialización tu mismo.

Ejemplo, tu cliente tiene cargado en memoria un catalogo y en el servidor tienes el mismo catalogo. En vez de enviar todo el objeto con su respectivo grafo, solo manda los ids:

 
La clase articulo tiene mucha información, pero siempre es la misma. En una compra se pueden tener N articulos. En vez de serializar todo ( o cambiar el tipo de dato a una lista de enteros ) se puede escribir el protocolo tu mismo.

Para hacerlo hay que sobre escribir los metodos privados ( si privados ) writeObject y readObject ( de esas cosas ocultas que tiene Java )

 

Así se puede especificar el formato de la serialización deseado. Para la mayoría de las veces basta con el mecanismo por omisión.

Para leer más al respecto está este articulo del año 2000 Discover the secrets of the Serializacion API

Gracias a todos por sus respuestas.

De hecho si, la clase que intentaba serializar contenia atributos que no estaban serializados (enrique tenia razon), se que al mandarlo a la cola de mensajes como trasient el atributo si llega, pero mi duda era si el valor del atributo lo podria recuperar despues y como todos los valores de la clase son seteados y son importantes persistir, los tuve que implementar serializable tambien.

Saludos.