Как преобразовать сообщение JMS в объект, используя Spring - PullRequest
0 голосов
/ 04 декабря 2018

Я новичок весной.Я пытаюсь отправить объект (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
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...