This is an automated email from the ASF dual-hosted git repository.
clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/artemis.git
The following commit(s) were added to refs/heads/main by this push:
new bd2ea56ab2 ARTEMIS-5863 use empty string for null values to match
properties files conventions and retain keys that have null values
bd2ea56ab2 is described below
commit bd2ea56ab2fc81e13cffb79206b60120bb33301d
Author: Gary Tully <[email protected]>
AuthorDate: Thu Jan 29 12:39:26 2026 +0000
ARTEMIS-5863 use empty string for null values to match properties files
conventions and retain keys that have null values
---
.../artemis/core/config/impl/ConfigurationImpl.java | 16 ++++++++--------
.../core/config/impl/ConfigurationImplTest.java | 20 ++++++++++++++++++++
2 files changed, 28 insertions(+), 8 deletions(-)
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
index 4bb27eeef8..85e21296e9 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
@@ -1108,12 +1108,9 @@ public class ConfigurationImpl extends
javax.security.auth.login.Configuration i
stream = stream.filter((Map.Entry<?, ?> entry)->
filterOn.isAssignableFrom(entry.getClass()));
}
stream.forEach(entry -> {
- if (entry.getValue() != null) {
- // nested by name
- nested.push(String.valueOf(entry.getKey()));
- export(beanUtils, nested, bufferedWriter, entry.getValue());
- nested.pop();
- }
+ nested.push(String.valueOf(entry.getKey()));
+ export(beanUtils, nested, bufferedWriter, entry.getValue());
+ nested.pop();
});
}
} else if (isComplexConfigObject(value)) {
@@ -1172,8 +1169,8 @@ public class ConfigurationImpl extends
javax.security.auth.login.Configuration i
}
});
} else {
- // string form works ok otherwise
- exportKeyValue(nested, bufferedWriter, String.valueOf(value));
+ // string form works ok otherwise, however we want an empty string
for null to match properties syntax
+ exportKeyValue(nested, bufferedWriter, value == null ? "" :
String.valueOf(value));
}
}
@@ -1193,6 +1190,9 @@ public class ConfigurationImpl extends
javax.security.auth.login.Configuration i
}
private boolean isComplexConfigObject(Object value) {
+ if (value == null) {
+ return false;
+ }
return !(value instanceof SimpleString || value instanceof Enum<?>) &&
value.getClass().getPackage().getName().contains("artemis");
}
diff --git
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
index 7bf060f156..94b0d234ad 100644
---
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
+++
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
@@ -34,11 +34,13 @@ import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
+import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringReader;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -3043,8 +3045,26 @@ public class ConfigurationImplTest extends
AbstractConfigurationTestBase {
// useKQueue here would generate a hashMap Value null, what would break
the exportAsProperties.
configuration.addAcceptorConfiguration("test",
"tcp://0.0.0.0:61616?useKQueue");
+
+
assertTrue(configuration.getAcceptorConfigurations().stream().findFirst().get().getCombinedParams().containsKey("useKQueue"));
+ // org.apache.activemq.artemis.utils.uri.URISchema.parseQuery generated
the null on trimming the value
+ assertEquals(null,
configuration.getAcceptorConfigurations().stream().findFirst().get().getCombinedParams().get("useKQueue"));
+
File fileOutput = new File(getTestDirfile(), "broker.properties");
assertDoesNotThrow(() -> configuration.exportAsProperties(fileOutput));
+ Properties properties = new Properties();
+ try (InputStream inStream = Files.newInputStream(fileOutput.toPath())) {
+ properties.load(inStream);
+ }
+ assertFalse(properties.isEmpty());
+
assertTrue(properties.containsKey("acceptorConfigurations.test.params.useKQueue"));
+ assertEquals("",
properties.get("acceptorConfigurations.test.params.useKQueue"));
+
+ // a null value is not an option for properties
+ properties.put("networCheckNIC", "");
+ configuration.parsePrefixedProperties(properties, null);
+ assertEquals(1, configuration.getAcceptorConfigurations().size());
+ assertEquals("",
configuration.getAcceptorConfigurations().stream().findFirst().get().getCombinedParams().get("useKQueue"));
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]