Category Archives: Mensageria
ActiveMQ + JMS – This class is not trusted to be serialized as ObjectMessage payload.
Posted by Gustavo Amaro
Galera estou estudando um pouco mais a fundo o ActiveMQ, e me deparei com essa mensagem de erro no momento de ‘deserializar’ uma instância de ObjectMessage, ele ocorre a partir da versão 5.12.2:
javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: Forbidden class br.com.modelo.Pedido! This class is not trusted to be serialized as ObjectMessage payload. Please take a look at http://activemq.apache.org/objectmessage.html for more information on how to configure trusted classes.
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36)
at org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:213)
at br.com.jms.ConsumidorTopicoComercial$1.onMessage(ConsumidorTopicoComercial.java:47)
at org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1404)
at org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:131)
at org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:202)
at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:133)
at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:48)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: Forbidden class br.com.modelo.Pedido! This class is not trusted to be serialized as ObjectMessage payload. Please take a look at http://activemq.apache.org/objectmessage.html for more information on how to configure trusted classes.
at org.apache.activemq.util.ClassLoadingAwareObjectInputStream.checkSecurity(ClassLoadingAwareObjectInputStream.java:112)
at org.apache.activemq.util.ClassLoadingAwareObjectInputStream.resolveClass(ClassLoadingAwareObjectInputStream.java:57)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
at org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:211)
… 9 more
Para ajudar quem possa vir a tomar esse erro, há duas opções para corrigir o problema alterando a classe consumidora.
Solução 1:
Adicionando o trecho:
System.setProperty("org.apache.activemq.SERIALIZABLE_PACKAGES","*");
Solução 2:
Substituindo o trecho:
ConnectionFactory factory = (ConnectionFactory) context.lookup("ConnectionFactory");
por
ActiveMQConnectionFactory factory = (ActiveMQConnectionFactory) context.lookup("ConnectionFactory");
factory.setTrustAllPackages(true);
Não sei se é a forma mais correta, porém resolveu. Se alguém tiver algum adendo, só postar aqui nos comentários 😉
See ya!
Publicado em ActiveMQ, Java, JMS, Mensageria, Serialização
Etiquetas: active, ActiveMQ, ActiveMQConnectionFactory, apache, apache activemq, available, body, broker, checkSecurity, classes, ClassLoadingAwareObjectInputStream, ClassNotFoundException, ConnectionFactory, consumer, consumidor, content, error, Failed, Failed to build body from content, Forbidden, Forbidden class This class is not trusted to be serialized as ObjectMessage payload, java, JMS, JMSException, mq, ObjectMessage, payload, queue, resolveClass, serialized, setTrustAllPackages, solution, solved, topic, trusted