1
2
3
4
5
6
7
8
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
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
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
82
83 assertTrue("Transformed object should be a TextMessage", result2 instanceof TextMessage);
84 assertEquals("This is a test TextMessage", ((TextMessage) result2).getText());
85
86
87
88 assertEquals("vm://recipient1, vm://recipient1, vm://recipient3",
89 result2.getStringProperty("recipients"));
90
91 }
92
93
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 }