0
我想使用JMS和ActiveMQ将应用程序中的对象发送到另一个应用程序。如何使用Spring Boot配置Jackson转换器?
org.springframework.jms.support.converter.MessageConversionException: Failed to resolve type id [com.wajdi.act.Message]; nested exception is java.lang.ClassNotFoundException: com.wajdi.act.Message
at org.springframework.jms.support.converter.MappingJackson2MessageConverter.getJavaTypeForMessage(MappingJackson2MessageConverter.java:507)
at org.springframework.jms.support.converter.MappingJackson2MessageConverter.fromMessage(MappingJackson2MessageConverter.java:228)
at org.springframework.jms.core.JmsTemplate.doConvertFromMessage(JmsTemplate.java:857)
at org.springframework.jms.core.JmsTemplate.receiveAndConvert(JmsTemplate.java:831)
at com.wajdi.jmsrece.JmsReceiverApplication.main(JmsReceiverApplication.java:53)
Caused by: java.lang.ClassNotFoundException: com.wajdi.act.Message
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:250)
at org.springframework.jms.support.converter.MappingJackson2MessageConverter.getJavaTypeForMessage(MappingJackson2MessageConverter.java:503)
... 4 more
2017-06-09 14:46:46.405 INFO 1732 --- [ActiveMQ Task-1] o.a.a.t.failover.FailoverTransport : Successfully connected to tcp://localhost:61616
类发送对象:
public class JmsAndActivitiApplication {
@Bean
public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
// This provides all boot's default to this factory, including the message converter
configurer.configure(factory, connectionFactory);
// You could still override some of Boot's default if necessary.
return factory;
}
@Bean // Serialize message content to json using TextMessage
public MessageConverter jacksonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.BYTES);
converter.setTypeIdPropertyName("_type");
return converter;
}
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(JmsAndActivitiApplication.class, args);
JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);
System.out.println("*******SEND**********");
jmsTemplate.convertAndSend("DEMO-JMS-QUEUE", new Message("1", "Hello"));
System.out.println("----------------------");
}
}
和接收类:
@SpringBootApplication
@EnableJms
public class JmsReceiverApplication {
@Bean
public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
// This provides all boot's default to this factory, including the message converter
configurer.configure(factory, connectionFactory);
// You could still override some of Boot's default if necessary.
return factory;
}
@Bean // Serialize message content to json using TextMessage
public MessageConverter jacksonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.BYTES);
converter.setTypeIdPropertyName("_type");
return converter;
}
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(JmsReceiverApplication.class, args);
JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);
System.out.println("*******receiving**********");
while(true){
try {
System.out.println(jmsTemplate.receiveAndConvert("DEMO-JMS-QUEUE"));
} catch (JmsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
我总是得到,告诉我它未能解决型异常。我以为我必须改变杰克逊转换器的配置,但我不知道如何。
显示您的代码'com.wajdi.act.Message' –
类信息包含两个字段的编号:字符串和contenu:String,并实现Serializable – Wajdi512
你的根本原因是'java.lang.ClassNotFoundException:com.wajdi.act.Message'并且对于这种异常,它看起来不可能调试或者建议不访问你的项目。 –