Skip to content

Commit a323c8f

Browse files
committed
Fix #309: make channelName available in Postprocessor script
The Postprocessor scope derives channelName from message.getMergedConnectorMessage().getChannelName(), but Message.getMergedConnectorMessage() never populated channelName on the merged ConnectorMessage. As a result the channelName variable was null in Postprocessor scripts, even though it is available in Deploy, Undeploy, and Preprocessor scripts. Populate channelName on the merged connector message from the Message's own channelName, falling back to the source connector message's channelName (which is reliably set during processing). Adds MessageTest covering the three cases. Signed-off-by: Giovanni Giannola <giogiannola@globalesm.com>
1 parent 776690e commit a323c8f

2 files changed

Lines changed: 95 additions & 0 deletions

File tree

donkey/src/main/java/com/mirth/connect/donkey/model/message/Message.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ public ConnectorMessage getMergedConnectorMessage() {
117117
if (mergedConnectorMessage == null) {
118118
mergedConnectorMessage = new ConnectorMessage();
119119
mergedConnectorMessage.setChannelId(channelId);
120+
mergedConnectorMessage.setChannelName(channelName);
120121
mergedConnectorMessage.setMessageId(messageId);
121122
mergedConnectorMessage.setServerId(serverId);
122123
mergedConnectorMessage.setReceivedDate(receivedDate);
@@ -128,6 +129,9 @@ public ConnectorMessage getMergedConnectorMessage() {
128129
ConnectorMessage sourceConnectorMessage = connectorMessages.get(0);
129130

130131
if (sourceConnectorMessage != null) {
132+
if (mergedConnectorMessage.getChannelName() == null) {
133+
mergedConnectorMessage.setChannelName(sourceConnectorMessage.getChannelName());
134+
}
131135
mergedConnectorMessage.setRaw(sourceConnectorMessage.getRaw());
132136
mergedConnectorMessage.setProcessedRaw(sourceConnectorMessage.getProcessedRaw());
133137
sourceMap = sourceConnectorMessage.getSourceMap();
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/*
2+
* Copyright (c) Mirth Corporation. All rights reserved.
3+
*
4+
* http://www.mirthcorp.com
5+
*
6+
* The software in this package is published under the terms of the MPL license a copy of which has
7+
* been included with this distribution in the LICENSE.txt file.
8+
*/
9+
10+
package com.mirth.connect.donkey.test;
11+
12+
import static org.junit.Assert.assertEquals;
13+
import static org.junit.Assert.assertNull;
14+
15+
import java.util.Calendar;
16+
17+
import org.junit.Test;
18+
19+
import com.mirth.connect.donkey.model.message.ConnectorMessage;
20+
import com.mirth.connect.donkey.model.message.Message;
21+
import com.mirth.connect.donkey.model.message.Status;
22+
23+
public class MessageTest {
24+
25+
private static final String CHANNEL_ID = "test-channel-id";
26+
private static final String CHANNEL_NAME = "Test Channel";
27+
private static final String SERVER_ID = "test-server-id";
28+
private static final long MESSAGE_ID = 1L;
29+
30+
/**
31+
* Regression test for issue #309: the channelName variable was not available in the
32+
* Postprocessor script because the merged connector message (used to build the postprocessor
33+
* scope) never had its channelName populated.
34+
*/
35+
@Test
36+
public void mergedConnectorMessageInheritsChannelNameFromSourceConnectorMessage() {
37+
Calendar receivedDate = Calendar.getInstance();
38+
39+
Message message = new Message();
40+
message.setMessageId(MESSAGE_ID);
41+
message.setChannelId(CHANNEL_ID);
42+
message.setServerId(SERVER_ID);
43+
message.setReceivedDate(receivedDate);
44+
45+
ConnectorMessage sourceConnectorMessage = new ConnectorMessage(CHANNEL_ID, CHANNEL_NAME, MESSAGE_ID, 0, SERVER_ID, receivedDate, Status.RECEIVED);
46+
message.getConnectorMessages().put(0, sourceConnectorMessage);
47+
48+
assertEquals(CHANNEL_NAME, message.getMergedConnectorMessage().getChannelName());
49+
}
50+
51+
/**
52+
* When the Message itself carries a channelName, it should be propagated to the merged
53+
* connector message even if (theoretically) the source connector message did not have one.
54+
*/
55+
@Test
56+
public void mergedConnectorMessageUsesMessageChannelNameWhenSet() {
57+
Calendar receivedDate = Calendar.getInstance();
58+
59+
Message message = new Message();
60+
message.setMessageId(MESSAGE_ID);
61+
message.setChannelId(CHANNEL_ID);
62+
message.setChannelName(CHANNEL_NAME);
63+
message.setServerId(SERVER_ID);
64+
message.setReceivedDate(receivedDate);
65+
66+
ConnectorMessage sourceConnectorMessage = new ConnectorMessage(CHANNEL_ID, null, MESSAGE_ID, 0, SERVER_ID, receivedDate, Status.RECEIVED);
67+
message.getConnectorMessages().put(0, sourceConnectorMessage);
68+
69+
assertEquals(CHANNEL_NAME, message.getMergedConnectorMessage().getChannelName());
70+
}
71+
72+
/**
73+
* With no channel name available anywhere, the merged connector message channelName stays null
74+
* (i.e. the fix does not fabricate a value).
75+
*/
76+
@Test
77+
public void mergedConnectorMessageChannelNameNullWhenUnavailable() {
78+
Calendar receivedDate = Calendar.getInstance();
79+
80+
Message message = new Message();
81+
message.setMessageId(MESSAGE_ID);
82+
message.setChannelId(CHANNEL_ID);
83+
message.setServerId(SERVER_ID);
84+
message.setReceivedDate(receivedDate);
85+
86+
ConnectorMessage sourceConnectorMessage = new ConnectorMessage(CHANNEL_ID, null, MESSAGE_ID, 0, SERVER_ID, receivedDate, Status.RECEIVED);
87+
message.getConnectorMessages().put(0, sourceConnectorMessage);
88+
89+
assertNull(message.getMergedConnectorMessage().getChannelName());
90+
}
91+
}

0 commit comments

Comments
 (0)