View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.transport.jms.integration;
8   
9   import org.mule.DefaultMuleMessage;
10  import org.mule.RequestContext;
11  import org.mule.api.MuleMessage;
12  import org.mule.routing.outbound.StaticRecipientList;
13  import org.mule.transformer.AbstractMessageTransformer;
14  import org.mule.transformer.types.DataTypeFactory;
15  import org.mule.transport.jms.transformers.AbstractJmsTransformer;
16  
17  import javax.jms.Message;
18  import javax.jms.Session;
19  import javax.jms.TextMessage;
20  
21  import org.apache.commons.logging.Log;
22  import org.apache.commons.logging.LogFactory;
23  import org.junit.Test;
24  
25  import static org.junit.Assert.assertEquals;
26  import static org.junit.Assert.assertTrue;
27  
28  /** <code>JmsTransformersTestCase</code> Tests the JMS transformer implementations. */
29  public class JmsMessageAwareTransformersMule2685TestCase extends AbstractJmsFunctionalTestCase
30  {
31  
32      protected final Log logger = LogFactory.getLog(getClass());
33  
34      private Session session = null;
35  
36      @Override
37      protected String getConfigResources()
38      {
39          return "integration/jms-transformers.xml";
40      }
41  
42      @Override
43      protected void doSetUp() throws Exception
44      {
45          super.doSetUp();
46  
47          session = getConnection(false, false).createSession(false, Session.AUTO_ACKNOWLEDGE);
48      }
49  
50      @Override
51      protected void doTearDown() throws Exception
52      {
53          RequestContext.setEvent(null);
54          if (session != null)
55          {
56              session.close();
57              session = null;
58          }
59      }
60  
61      @Test
62      public void testMessageAwareTransformerChainedWithObjectToJMSMessage() throws Exception
63      {
64          RequestContext.setEvent(getTestEvent("test"));
65  
66          MuleMessage message = new DefaultMuleMessage("This is a test TextMessage", muleContext);
67  
68          SetTestRecipientsTransformer trans = new SetTestRecipientsTransformer();
69          MuleMessage result1 = (MuleMessage) trans.transform(message);
70  
71          // Check that transformer 1 set message property ok.
72          assertEquals("vm://recipient1, vm://recipient1, vm://recipient3",
73                       result1.getOutboundProperty("recipients"));
74  
75          AbstractJmsTransformer trans2 = new SessionEnabledObjectToJMSMessage(session);
76          Message result2 = (Message) trans2.transform(result1);
77  
78          // Test to see that ObjectToJMSMessage transformer transformed to JMS message
79          // correctly
80          assertTrue("Transformed object should be a TextMessage", result2 instanceof TextMessage);
81          assertEquals("This is a test TextMessage", ((TextMessage) result2).getText());
82  
83          // Check to see if after the ObjectToJMSMessage transformer these properties
84          // are on JMS message
85          assertEquals("vm://recipient1, vm://recipient1, vm://recipient3",
86              result2.getStringProperty("recipients"));
87  
88      }
89  
90      /** Test <i>AbstractMessageTransformer</i> which sets Message properties */
91      private class SetTestRecipientsTransformer extends AbstractMessageTransformer
92      {
93  
94          public SetTestRecipientsTransformer()
95          {
96              registerSourceType(DataTypeFactory.MULE_MESSAGE);
97          }
98  
99          @Override
100         public Object transformMessage(MuleMessage message, String outputEncoding)
101         {
102 
103             String recipients = "vm://recipient1, vm://recipient1, vm://recipient3";
104             logger.debug("Setting recipients to '" + recipients + "'");
105             message.setOutboundProperty(StaticRecipientList.RECIPIENTS_PROPERTY, recipients);
106             return message;
107         }
108 
109     }
110 
111 }