2017-01-03 156 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