Я пытаюсь отправить сообщение в очередь ActiveMQ, но получаю java.lang.ClassCastException: java.util.UUID cannot be cast to java.lang.String
. Я пытаюсь найти, как решить эту проблему, но нет реальных ответов в Интернете. Я посылаю его с частным способом, например:ClassCastException при отправке сообщения ActiveMQ с Camel
private void sendToHosts(Map<Object, Object> msg, String[] hosts)
{
Arrays.stream(hosts)
.forEach(host -> {
ProducerTemplate template = camelContext.createProducerTemplate();
template.setDefaultEndpointUri("direct:com.example.updatehost." + host);
try {
template.sendBody(msg); //throwing ClassCastException
}
catch(Exception e) {
e.printStackTrace();
}
});
где camelContext вводится с помощью пружины, и я знаю, что это работает.
Я знаю, что ActiveMQ настроен правильно, так как единственный способ получить этот метод - получить сообщение из другой очереди, и я пытаюсь передать это сообщение после выполнения некоторых методов выше, но я не изменяю сообщение в любом случае.
В сообщении есть Map<UUID,Object>
, в котором мое подозрение относится к основной проблеме. Частичное StackTrace:
java.lang.ClassCastException: java.util.UUID не может быть приведен к java.lang.String на org.apache.activemq.util.MarshallingSupport.marshalPrimitiveMap (MarshallingSupport.java:61) на org.apache.activemq.util.MarshallingSupport.marshalPrimitive (MarshallingSupport.java:151) на org.apache.activemq.util.MarshallingSupport.marshalPrimitiveMap (MarshallingSupport.java:64) на org.apache. activeemq.command.ActiveMQMapMessage.storeContent (ActiveMQMapMessage.java:150) по адресу org.apache.activemq.command.ActiveMQMapMessage.copy (ActiveMQMapMessage.java:121) на org.apache.activemq.command.ActiveMQMapMessage.copy (ActiveMQMapMessage.java:116) на org.apache.activemq.ActiveMQSession Пошлите (ActiveMQSession.java:1773) на org.apache.activemq.ActiveMQMessageProducer.send (ActiveMQMessageProducer.java:289) на org.apache.activemq.ActiveMQMessageProducer.send (ActiveMQMessageProducer.java:224) в org.apache.activemq.pool.PooledProducer.send (PooledProducer.java:79) по адресу org.apache.activemq.pool.PooledProducer.send (PooledProducer.java:62) по адресу org.springframework.jms.core.JmsTemplate.doSend (JmsTemplate.java:635) на org.apache.camel.component.jms.JmsConfiguration $ CamelJmsTemplate.doSend (JmsConfiguration.java:343)
Кто-нибудь столкнулся с этим, а затем нашел способ обойти ClassCastException
? Мне показалось странным, что при сортировке, они ожидают, что это будет Map<String,Object>
и не поддерживают Map<Object,Object>
.
I 100% нуждается в Map<UUID,Object>
в сообщении, а также, не хочет, чтобы преобразовать UUID
к String
представление, как я делаю некоторые вещи с Hibernate, который требует, чтобы это было UUID
позже вниз по дороге.
Совершенно верно, JMS MapMessage - это карта с ограничениями на объект, вам нужно обработать это в коде перед отправкой. –
Вместо отправки обработчика метода для сообщения, как я делал, я закончил используя метод 'multicast()' 'RouteBuilder', чтобы отправить сообщение и использовать' Predicate' для фильтрации сообщений как непеременных. Теперь я работаю как шарм, когда я делаю это вне метода. – Orin