2017-01-03 8 views

Antwort

0

Sie können eine Antwort-Transformer-Java-Klasse verwenden, um dies zu tun. Stellen Sie sicher, dass Sie zuvor einen objectToJms-Transformer verwenden.

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 Kommentare

Sie nicht die ExtractJmsMessageIdTransformer Klasse auf Ihrer Antwort Transformatoren definieren. In Ihrem mule-config.xml fügen Sie folgendes

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

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

dann JMS-Warteschlange definieren wie diese

<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

ich null ID bekommen, wird es vom Eingang der Anmeldung?
Mein XML ist wie folgt: ' '
Protokoll zeigt unter Ausgabe: mypack.ExtractJmsMessageIdTransformer: JMSMessage als Nutzlast gefunden. jmsMessageId = null. – Kepler186f

+0

Danke für die Antwort. Entschuldigung für meine schlechte Formatierungsantwort, auf die ich immer noch dran bin. Bitte überprüfen Sie meinen obigen Code und schlagen Sie vor, wo die Korrekturen benötigt werden. – Kepler186f

+0

Grundsätzlich verwende ich entweder Einweg-oder Anfrage-Antwort-Austausch-Muster mit TIBCO EMS, ich würde nur die NullPayload, also keine JMSMessageID. Fehlt uns etwas am Konfigurationsende von Mule Flow oder einfach nur beim TIBCO EMS? Ich kann nicht mit TIBCO EMS behaupten, da ein grundlegender TIBCO JMS-Fluss sofort die Nachrichten-ID im Antwortschema erhält. Auch mit einem Beispiel-Java-Code versucht, ich war erfolgreich in der tatsächlichen gesendeten Nachricht JMSMessageID, nur Mule-Flow ist nicht in der Lage, es zu bekommen. Irgendwelche anderen Vorschläge von der Konfiguration/vom Code enden bitte? Danke im Voraus. – Kepler186f

Verwandte Themen