Quiero ver el contenido del mensaje que se ha puesto en cola en las colas de ActiveMQ. Abrí la consola web ( http://localhost:8161/admin/queues.jsp ) e hice clic en el ID de mensaje del mensaje de la cola. Me da el siguiente error en la ventana "Detalles del mensaje" en lugar de dar el contenido del mensaje.
"javax.jms.JMSException: no se pudo crear el cuerpo a partir del contenido. La clase serializable no está disponible para el intermediario. Motivo: java.lang.ClassNotFoundException:"
¿Cuál es la causa de esta excepción y qué debo hacer para deshacerme de esto?
He visto este mismo error usando ActiveMQ versión 5.8.0
En mi caso, fue una pista falsa , la consola ActiveMQ no pudo deserializar el mensaje, no debe tener acceso al contenedor en el que se encuentra la clase, pero la aplicación del consumidor sí lo tiene, y el mensaje se pasa sin problemas de la cola a el consumidor.
Me interesaría ver si hay una solución para el problema aquí (ver el mensaje en la consola), y también cómo se maneja esto en las versiones más recientes de ActiveMQ.
Como mencionó OwIR, debe establecer la ruta del archivo jar que contiene las clases en la propiedad wrapper.java.classpath.3 en %ACTIVEMQ_HOME%\bin\win64\wrapper.conf .
Es posible que encuentre la siguiente excepción después de actualizar la propiedad anterior
Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: Forbidden class Para solucionarlo, establezca la propiedad wrapper.java.additional.13 en -Dorg.apache.activemq.SERIALIZABLE_PACKAGES="<choose_the_packages_set_it_here>"
También puede usar -Dorg.apache.activemq.SERIALIZABLE_PACKAGES="*" como valor, sin embargo, puede que no sea seguro usar un comodín.
¡¡Esto funcionó para mí!! Espero que te ayude
If you are sending class, in this case you will face this issue. For example: customer is my class object and when you try to see the infomation it gives you error: Serializable class not available to broker: java.lang.ClassNotFoundException while viewing messages in ActiveMQ jmsTemplate.convertAndSend(jmsDestination,customer); The Solution of this problem is ("toString()") method along with class. Solution: jmsTemplate.convertAndSend(jmsDestination,customer.toString());