2017-01-03 16 views
0

方法を見つけようとしましたが、メッセージをキューに送信した後にJMSからの応答として返されるJMSMessageIDを取得できませんでした。誰かがそれで私を助けてくれますか?ありがとう。 (この質問はExtract JMSMessageID on response from JMS Queueと似ていますが、同じ質問に対してコメントも再リクエストもできないので、提案に続いて新しい質問を作成することはできません)JMSレスポンスからJMSMessageIDを取得する方法

答えて

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; 
    } 

}コメント

あなたはあなたの応答の変圧器のExtractJmsMessageIdTransformerクラスを定義していないパー

EDIT1。あなたのラバ-config.xmlに以下の

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

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

が、私はそれが入力からログインしている、ヌルIDを取得し、この

<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キューを定義に追加しますか? 私のXMLは以下の通りです: ' "INFO" doc:name = "Logger" message = "#[message.outboundProperties]" /> '
出力ログは以下の通りです。 mypack.ExtractJmsMessageIdTransformer:ペイロードとしてJmsMessageが見つかりました。 jmsMessageId = null。 – Kepler186f

+0

お返事ありがとうございます。私のフォーマットの応答が悪いので申し訳ありませんが、私はまだチューニングしています。上記のコードをチェックし、修正が必要な場所を教えてください。 – Kepler186f

+0

基本的には、TIBCO EMSで一方向または要求応答交換パターンを使用するか、NullPayloadを取得するだけで、JMSMessageIDは取得されません。ミュールフローのコンフィギュレーション終了かTIBCO EMSだけで何かが欠けていますか?基本的なTIBCO JMSフローが即座に応答スキーマでmessageidを取得するので、私はTIBCO EMSでそれを要求できません。また、サンプルのJavaコードで試してみましたが、実際に送信されたメッセージのJMSMessageIDを取得するのに成功しました。ミュールのフローは取得できません。設定/コードの他の提案はどうぞよろしいですか?前もって感謝します。 – Kepler186f

関連する問題