View Javadoc

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