You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ve...@apache.org on 2022/06/02 20:24:19 UTC

[synapse] branch master updated: Make serializeRegistry deterministic

This is an automated email from the ASF dual-hosted git repository.

veithen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/synapse.git


The following commit(s) were added to refs/heads/master by this push:
     new f31acacc6 Make serializeRegistry deterministic
f31acacc6 is described below

commit f31acacc60b2fb0e5eebd9c97e7b3bba393beee2
Author: Andreas Veithen <an...@gmail.com>
AuthorDate: Thu Jun 2 20:22:25 2022 +0000

    Make serializeRegistry deterministic
    
    RegistrySerializer.serializeRegistry iterates over the entries of a
    hash map and produces a result that depends on the Java version. Fix
    that by sorting the entries.
---
 .../java/org/apache/synapse/config/xml/RegistrySerializer.java | 10 ++++++----
 .../apache/synapse/config/xml/RegistrySerializationTest.java   |  2 +-
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/synapse/config/xml/RegistrySerializer.java b/modules/core/src/main/java/org/apache/synapse/config/xml/RegistrySerializer.java
index 6ba990f6d..80438e8ed 100644
--- a/modules/core/src/main/java/org/apache/synapse/config/xml/RegistrySerializer.java
+++ b/modules/core/src/main/java/org/apache/synapse/config/xml/RegistrySerializer.java
@@ -30,6 +30,8 @@ import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.registry.Registry;
 
 import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
 
 /**
  * &lt;registry [name="string"] provider="provider.class"&gt;
@@ -55,10 +57,10 @@ public class RegistrySerializer {
             handleException("Invalid registry. Provider is required");
         }
 
-        Iterator iter = registry.getConfigurationProperties().keySet().iterator();
-        while (iter.hasNext()) {
-            String name = (String) iter.next();
-            String value = (String) registry.getConfigurationProperties().get(name);
+        // Sort the properties to make the result deterministic.
+        for (Map.Entry<Object, Object> entry : new TreeMap<>(registry.getConfigurationProperties()).entrySet()) {
+            String name = (String) entry.getKey();
+            String value = (String) entry.getValue();
             OMElement property = fac.createOMElement("parameter", synNS);
             property.addAttribute(fac.createOMAttribute(
                 "name", nullNS, name));
diff --git a/modules/core/src/test/java/org/apache/synapse/config/xml/RegistrySerializationTest.java b/modules/core/src/test/java/org/apache/synapse/config/xml/RegistrySerializationTest.java
index b87138435..db34f1dde 100644
--- a/modules/core/src/test/java/org/apache/synapse/config/xml/RegistrySerializationTest.java
+++ b/modules/core/src/test/java/org/apache/synapse/config/xml/RegistrySerializationTest.java
@@ -33,8 +33,8 @@ public class RegistrySerializationTest extends AbstractTestCase {
 
         String regitryConfiguration = "<syn:registry xmlns:syn=\"http://ws.apache.org/ns/synapse\" " +
                 "provider=\"org.apache.synapse.registry.url.SimpleURLRegistry\">" +
-                "<syn:parameter name=\"root\">file:./../../repository/</syn:parameter>" +
                 "<syn:parameter name=\"cachableDuration\">15000</syn:parameter>" +
+                "<syn:parameter name=\"root\">file:./../../repository/</syn:parameter>" +
                 "</syn:registry>";
 
         OMElement registryElement = createOMElement(regitryConfiguration);