Вот мой случай использования:Как получить объект, используя Spring jmsTemplate
успокоительных вызывает службу для создания сообщения в очереди JMS с помощью jmsTemplate:
@Autowired JmsTemplate jmsTemplate; public void sendMessage(final ApplicationContext appContext) { jmsTemplate.send(new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { ObjectMessage objectMessage = session.createObjectMessage(appContext); return objectMessage; } }); }
Других успокоительный называет сервис, чтобы получить сообщение из очереди с помощью:
public ApplicationContext getMessage(final ApplicationContext appContext) { Object wObj = jmsTemplate.receive(MessagingConfiguration.NAMED_QUEUE); return (ApplicationContext)wObj; }
Как вы можете прочитать, это довольно просто. Я знаю, что я могу использовать асинхронные прослушиватели с аннотацией @JmsListener, но мне нужно синхронизировать действие получения. Когда я пытаюсь использовать этот код, я получаю исключение класса (которое делает чувство). Мой вопрос: как преобразовать сообщение (ActiveMQObjectMessage) в мой POJO (ApplicationContext)?
StackTrace:
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/ApplicationContextManager] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: org.apache.activemq.command.ActiveMQObjectMessage cannot be cast to com.tigidou.commons.appcontext.model.ApplicationContext] with root cause java.lang.ClassCastException: org.apache.activemq.command.ActiveMQObjectMessage cannot be cast to com.tigidou.commons.appcontext.model.ApplicationContext
Я попробовал то, что предлагается в http://stackoverflow.com/a/11863662/7269013, но я получаю эту ошибку: javax.jms.JMSException: Не удалось создать тело из содержимого. Сериализуемый класс недоступен для брокера. Причина: java.lang.ClassNotFoundException: Запрещенный класс com.tigidou.commons.appcontext.model.ApplicationContext! Этот класс не считается сериализованным как полезная нагрузка ObjectMessage. – user7228459
[ссылка] (http://activemq.apache.org/objectmessage.html) объясняет, как включить сериализацию pojo в JMS (ActiveMQ). Это не возвращает ошибок. Добавлено: ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); \t \t подключениеFactory.setBrokerURL (DEFAULT_BROKER_URL); \t \t connectionFactory.setTrustedPackages (Arrays.asList ("com.desjardins.assurancedommages.commons")); – user7228459