2017-01-03 51 views

回答

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每評論

你不能確定你的迴應變壓器ExtractJmsMessageIdTransformer類。在你的騾子-config.xml中添加以下

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

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

則這樣定義

<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

您的JMS隊列,我得到空ID,它是從輸入登錄?
我的XML如下: ' '
輸出結果如下: mypack.ExtractJmsMessageIdTransformer:找到JmsMessage作爲有效載荷。 jmsMessageId = null。 – Kepler186f

+0

感謝您的回覆。對不起,我格式不好的回覆,我仍然在調整。請檢查我的上述代碼,並提出需要更正的地方。 – Kepler186f

+0

基本上,我使用單向或請求 - 響應交換模式與TIBCO EMS,我只會得到NullPayload,因此沒有JMSMessageID。我們是否從Mule流程的配置末端丟失了某些東西,或者僅僅使用TIBCO EMS?由於基本的TIBCO JMS流程會立即得到響應模式中的messageid,因此我無法使用TIBCO EMS進行聲明。還嘗試了一個示例java代碼,我成功地獲取了實際發送的消息的JMSMessageID,只是Mule流無法獲取它。請提供配置/代碼結束的其他建議嗎?提前致謝。 – Kepler186f