Я новичок весной.Я пытаюсь отправить объект (Temperature.class) в виде сообщения JMS, преобразуя его в JSON и получая его снова, автоматически преобразуя в объект снова.Отправка и преобразование работает, получение также, но без преобразования обратно в правильный тип.
Может быть, мне нужно установить typeIdMappings.Но, во-первых, я не уверен, является ли это причиной, а во-вторых, я сейчас не знаю, как настроить его в конфигурации Spring XML.Может быть, кто-нибудь подскажет, как это сделать в XML.
Конфигурация отправителя:
<jee:jndi-lookup id="connectionFactory" jndi-name="ConnectionFactory" />
<jee:jndi-lookup id="temperatureQueueJndi" jndi-name="jms/queue/TemperaturesQ" />
<bean id="temperatureSender" class="jms.sender.TemperatureSender">
<property name="queue" ref="temperatureQueueJndi" />
</bean>
<bean id="jmsMsgConverter"
class="org.springframework.jms.support.converter.MappingJackson2MessageConverter">
<property name="targetType" value="TEXT" />
<property name="typeIdPropertyName" value="_type" />
</bean>
<bean id="jmsMsgTemplate"
class="org.springframework.jms.core.JmsMessagingTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="jmsMessageConverter" ref="jmsMsgConverter" />
</bean>
<context:component-scan
base-package="jms.sender" />
Код отправителя:
public class TemperatureSender {
@Autowired
private ClassPathXmlApplicationContext applicationContext;
@Autowired
@Qualifier("jmsMsgTemplate")
private JmsMessagingTemplate jmsTemplate;
private Queue queue;
public TemperatureSender() {
}
public void setQueue(Queue queue) {
this.queue = queue;
}
public void sendMessage(final Temperature message) {
this.jmsTemplate.convertAndSend(this.queue, message);
}
}
Конфигурация Receiver Spring:
<jee:jndi-lookup id="connectionFactory" jndi-name="ConnectionFactory" />
<jee:jndi-lookup id="temperatureQueueJndi" jndi-name="jms/queue/TemperaturesQ" />
<bean id="temperatureReceiver" class="jms.receiver.TemperatureReceiver" />
<bean id="jmsContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer"
lazy-init="false">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="temperatureQueueJndi" />
<property name="messageListener" ref="temperatureReceiver" />
<property name="clientId" value="1234" />
<property name="sessionAcknowledgeMode" value="1" /> <!-- 1 = AUTO_ACKNOWLEDGE -->
<property name="messageConverter" ref="jmsMsgConverter"/>
</bean>
<bean id="jmsMsgConverter" class="org.springframework.jms.support.converter.MappingJackson2MessageConverter">
<property name="targetType" value="TEXT" />
<property name="typeIdPropertyName" value ="_type" />
</bean>
Код получателя:
public class TemperatureReceiver implements MessageListener {
@Autowired
private ClassPathXmlApplicationContext applicationContext;
@Autowired
private DefaultMessageListenerContainer msgListenerContainer;
@Override public void onMessage(final Message message) {
if (message instanceof TextMessage) {
try {
System.out.println(((TextMessage) message).getText());
} // try
catch (JMSException e) {
throw new RuntimeException(e);
} // catch
}
else {
throw new IllegalArgumentException("This receiver only processes text messages!");
} // if
}
}