1
2
3
4
5
6
7
8
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
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
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
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
81 assertTrue("Transformed object should be a TextMessage", result2 instanceof TextMessage);
82 assertEquals("This is a test TextMessage", ((TextMessage) result2).getText());
83
84
85 assertEquals("vm://recipient1, vm://recipient1, vm://recipient3", result2.getStringProperty("recipients"));
86
87 }
88
89
90
91
92
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
105 protected Session getSession()
106 {
107 return transformerSession;
108 }
109 }
110
111
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 }