1   /*
2    * $Id: MessageAwareTransformersMule2685TestCase.java 10489 2008-01-23 17:53:38Z dfeist $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.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.issues;
12  
13  import org.mule.DefaultMuleMessage;
14  import org.mule.RequestContext;
15  import org.mule.api.MuleMessage;
16  import org.mule.api.transformer.TransformerException;
17  import org.mule.routing.outbound.StaticRecipientList;
18  import org.mule.transformer.AbstractMessageAwareTransformer;
19  import org.mule.transport.jms.JmsConnector;
20  import org.mule.transport.jms.integration.AbstractJmsFunctionalTestCase;
21  import org.mule.transport.jms.transformers.AbstractJmsTransformer;
22  import org.mule.transport.jms.transformers.ObjectToJMSMessage;
23  
24  import javax.jms.ConnectionFactory;
25  import javax.jms.Message;
26  import javax.jms.Session;
27  import javax.jms.TextMessage;
28  
29  import org.apache.commons.logging.Log;
30  import org.apache.commons.logging.LogFactory;
31  
32  /** <code>JmsTransformersTestCase</code> Tests the JMS transformer implementations. */
33  public class MessageAwareTransformersMule2685TestCase extends AbstractJmsFunctionalTestCase
34  {
35      protected final Log logger = LogFactory.getLog(getClass());
36  
37      private Session session = null;
38  
39      protected String getConfigResources()
40      {
41          return "activemq-config.xml";
42      }
43  
44      protected void doSetUp() throws Exception
45      {
46          super.doSetUp();
47  
48          JmsConnector connector = (JmsConnector) muleContext.getRegistry().lookupConnector("jmsConnector");
49          ConnectionFactory cf = connector.getConnectionFactory();
50  
51          session = cf.createConnection().createSession(false, Session.AUTO_ACKNOWLEDGE);
52      }
53  
54      // @Override
55      protected void doTearDown() throws Exception
56      {
57          RequestContext.setEvent(null);
58          if (session != null)
59          {
60              session.close();
61              session = null;
62          }
63      }
64  
65      public void testMessageAwareTransformerChainedWithObjectToJMSMessage() throws Exception
66      {
67          RequestContext.setEvent(getTestEvent("test"));
68  
69          MuleMessage message = new DefaultMuleMessage("This is a test TextMessage");
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", result1.getProperty("recipients"));
76  
77          AbstractJmsTransformer trans2 = new SessionEnabledObjectToJMSMessage(session);
78          Message result2 = (Message) trans2.transform(result1);
79  
80          // Test to see that ObjectToJMSMessage transformer transformed to JMS message correctly
81          assertTrue("Transformed object should be a TextMessage", result2 instanceof TextMessage);
82          assertEquals("This is a test TextMessage", ((TextMessage) result2).getText());
83  
84          // Check to see if after the ObjectToJMSMessage transformer these properties are on JMS message
85          assertEquals("vm://recipient1, vm://recipient1, vm://recipient3", result2.getStringProperty("recipients"));
86  
87      }
88  
89      /*
90       * This class overrides getSession() to return the specified test MuleSession; otherwise we would need a
91       * full-fledged JMS connector with dispatchers etc. TODO check if we really need this stateful transformer
92       * now
93       */
94      public static class SessionEnabledObjectToJMSMessage extends ObjectToJMSMessage
95      {
96          private final Session transformerSession;
97  
98          public SessionEnabledObjectToJMSMessage(Session session)
99          {
100             super();
101             transformerSession = session;
102         }
103 
104         // @Override
105         protected Session getSession()
106         {
107             return transformerSession;
108         }
109     }
110 
111     /** Test <i>AbstractMessageAwareTransformer</i> which sets Message properties */
112     private class SetTestRecipientsTransformer extends AbstractMessageAwareTransformer
113     {
114 
115         public SetTestRecipientsTransformer()
116         {
117             registerSourceType(MuleMessage.class);
118         }
119 
120         public Object transform(MuleMessage message, String outputEncoding) throws TransformerException
121         {
122 
123             String recipients = "vm://recipient1, vm://recipient1, vm://recipient3";
124             logger.debug("Setting recipients to '" + recipients + "'");
125             message.setProperty(StaticRecipientList.RECIPIENTS_PROPERTY, recipients);
126             return message;
127         }
128 
129     }
130 
131 }