2017-01-03 2 views
0

Я попытался найти способ, но не удалось получить JMSMessageID, который приходит как ответ от JMS после отправки сообщения в очередь. Кто-нибудь, пожалуйста, помогите мне с этим? Благодарю. (этот вопрос похож на Extract JMSMessageID on response from JMS Queue, но я не мог ни комментировать, ни повторять запрос по тому же вопросу, поэтому создавая новый вопрос, следующий за предложением)Как получить JMSMessageID из ответа JMS

ответ

0

Для этого вы можете использовать java-класс для трансформатора ответа. Перед этим поставьте трансформатор objectToJms.

import javax.jms.JMSException; 
import javax.jms.Message; 

import org.apache.commons.lang.StringUtils; 
import org.mule.api.MuleMessage; 
import org.mule.api.transformer.TransformerException; 
import org.mule.api.transport.PropertyScope; 
import org.mule.transformer.AbstractMessageTransformer; 

public class ExtractJmsMessageIdTransformer extends AbstractMessageTransformer { 

    @Override 
    public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException { 

     if (message.getPayload() instanceof Message) { 
      Message jmsMessage = (Message) message.getPayload(); 
      String jmsMessageId = null; 
      try { 

       jmsMessageId = jmsMessage.getJMSMessageID(); 
       logger.info("Found JmsMessage as payload. jmsMessageId = " + jmsMessageId) 
      } catch (final JMSException e) { 
       throw new TransformerException(this, e); 
      } 
     } 

     return message; 
    } 

}

EDIT1 Per Комментарии

Вы не определяет класс ExtractJmsMessageIdTransformer на ваших трансформаторов реагирования. В вашем муле-config.xml добавьте следующие

<custom-transformer class="mypack.ExtractJmsMessageIdTransformer" name="extractJmsMessageIdTransformer"/> 

<jms:object-to-jmsmessage-transformer name="objectToJms" /> 

затем определить свою очередь JMS, как этот

<jms:outbound-endpoint exchange-pattern="request-response" disableTemporaryReplyToDestinations="true" queue="sample" connector-ref="JMS" 
          doc:name="JMS" transformer-refs="objectToJms" responseTransformer-refs="objectToJms extractJmsMessageIdTransformer"/> 
    <logger level="INFO" doc:name="Logger" message="#[message.outboundProperties]"/> 
+0

Я получаю нулевой идентификатор, является его входом от входа?
Мой XML выглядит следующим образом: ' '
Журнал показывает ниже: mypack.ExtractJmsMessageIdTransformer: найдено JmsMessage как полезная нагрузка. jmsMessageId = null. – Kepler186f

+0

Спасибо за ответ. Извините за мой плохой отформатированный ответ, я до сих пор настроен. Пожалуйста, проверьте мой код выше и укажите, где он нуждается в исправлениях. – Kepler186f

+0

В принципе, я использую одноразовый или запрос-обменный шаблон обмена с TIBCO EMS, я бы просто получил NullPayload, следовательно, не JMSMessageID. Не хватает ли мы чего-то из конца конфигурации потока Mule или только с помощью TIBCO EMS? Я не могу требовать его с TIBCO EMS, так как основной поток TIBCO JMS мгновенно получит messageid в схеме ответа. Также, попробовав пример кода Java, мне удалось получить сообщение JMSMessageID отправленного сообщения, просто поток Mule не смог его получить. Любые другие предложения из конфигурации/кода, пожалуйста? Заранее спасибо. – Kepler186f

Смежные вопросы