From 82ec38b323cb858bc89877a583e02dd81e974259 Mon Sep 17 00:00:00 2001 From: Chris McQuillen Date: Sun, 1 Sep 2024 19:34:45 -0500 Subject: [PATCH 1/2] Preserve order in HTTP parameter Map The HttpUtil.getTableMap method creates and returns a copy of a Map. This commit changes the new Map instance from a HashMap to a LinkedHashMap in order to preserve the iteration order of the original Map being copied. Issue: https://github.com/nextgenhealthcare/connect/issues/6276 Original-pull-request: https://github.com/nextgenhealthcare/connect/pull/6296 Signed-off-by: Tony Germano --- server/src/com/mirth/connect/util/HttpUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/com/mirth/connect/util/HttpUtil.java b/server/src/com/mirth/connect/util/HttpUtil.java index 1b0b80854a..b2ec75437e 100644 --- a/server/src/com/mirth/connect/util/HttpUtil.java +++ b/server/src/com/mirth/connect/util/HttpUtil.java @@ -11,7 +11,7 @@ import java.nio.charset.Charset; import java.util.ArrayList; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -104,7 +104,7 @@ public static Map> getTableMap(boolean useVariable, String } public static Map> getTableMap(String mapVariable, MessageMaps messageMaps, ConnectorMessage connectorMessage) { - Map> map = new HashMap>(); + Map> map = new LinkedHashMap>(); try { Map source = (Map) messageMaps.get(mapVariable, connectorMessage); From 1cf1c6fc589368a25699e60f614a113f23082d91 Mon Sep 17 00:00:00 2001 From: Richard Ogin Date: Wed, 2 Jul 2025 22:03:28 -0500 Subject: [PATCH 2/2] Add test for HttpUtil.getTableMap Signed-off-by: Richard Ogin --- .../com/mirth/connect/util/HttpUtilTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/server/test/com/mirth/connect/util/HttpUtilTest.java b/server/test/com/mirth/connect/util/HttpUtilTest.java index f138119023..62912424bc 100644 --- a/server/test/com/mirth/connect/util/HttpUtilTest.java +++ b/server/test/com/mirth/connect/util/HttpUtilTest.java @@ -9,10 +9,13 @@ package com.mirth.connect.util; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.fail; import java.security.KeyStore; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.UUID; import javax.net.ssl.SSLContext; @@ -22,6 +25,9 @@ import org.apache.http.ssl.SSLContexts; import org.junit.Test; +import com.mirth.connect.donkey.model.message.ConnectorMessage; +import com.mirth.connect.donkey.util.MessageMaps; + public class HttpUtilTest { @Test @@ -40,4 +46,20 @@ public void testExecuteGetRequest() throws Exception { } catch (Exception e) { } } + + @Test + public void testMapOrderPreserved() throws Exception { + final String MAP_KEY = "MyMap"; + + Map initial = new LinkedHashMap<>(); + initial.put("First", 1); + initial.put("Second", 2); + initial.put("Third", 3); + + ConnectorMessage cm = new ConnectorMessage(); + cm.getSourceMap().put(MAP_KEY, initial); + + Map copied = HttpUtil.getTableMap(MAP_KEY, new MessageMaps(), cm); + assertArrayEquals("Failed to preserve key order", initial.keySet().toArray(), copied.keySet().toArray()); + } }