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

gtully 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 afd557820c ARTEMIS-5892 don't export deprecated attributes
afd557820c is described below

commit afd557820c178acc9ed79819960ec5079dd0533c
Author: Gary Tully <[email protected]>
AuthorDate: Tue Feb 10 16:00:29 2026 +0000

    ARTEMIS-5892 don't export deprecated attributes
---
 .../core/config/impl/ConfigurationImpl.java        | 20 ++++++++--
 .../core/config/impl/ConfigurationImplTest.java    | 44 ++++++++++++++++++++++
 .../core/config/impl/FileConfigurationTest.java    | 36 ++++++++++--------
 3 files changed, 82 insertions(+), 18 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 85e21296e9..50d2ee9e22 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
@@ -1049,12 +1049,13 @@ public class ConfigurationImpl extends 
javax.security.auth.login.Configuration i
       }
    }
 
-   final Set<String> ignored = Set.of(
+   static final Set<String> defaultIgnoredForExportProperties = Set.of(
       // we report errors through the status, it should not typically be set
       "status",
       // we cannot import a map<string,set<string>> property and this feature 
is only applied by the xml parser
       "securityRoleNameMappings",
-      // another xml ism using a deprecated config object
+      // using a deprecated config object
+      "queueConfigurations",
       "queueConfigs",
       "encodeSize",
       // duplicates
@@ -1072,6 +1073,19 @@ public class ConfigurationImpl extends 
javax.security.auth.login.Configuration i
       // and connectionElements need to be split
       "connectionElements"
    );
+
+   static Map<Class, Set<String>> ignoredByType = Map.of(
+      CoreAddressConfiguration.class, Set.of("queueConfigurations")
+   );
+
+   static boolean isIgnored(Class clazz, PropertyDescriptor descriptor) {
+      Set<String> ignoredByTypeSet = ignoredByType.get(clazz);
+      if (ignoredByTypeSet != null) {
+         return ignoredByTypeSet.contains(descriptor.getName());
+      }
+      return defaultIgnoredForExportProperties.contains(descriptor.getName());
+   }
+
    private void export(BeanUtilsBean beanUtils, Stack<String> nested, 
BufferedWriter bufferedWriter, Object value) {
 
       if (value instanceof Collection collection) {
@@ -1141,7 +1155,7 @@ public class ConfigurationImpl extends 
javax.security.auth.login.Configuration i
          // recursive export via accessors
          
Arrays.stream(beanUtils.getPropertyUtils().getPropertyDescriptors(value)).filter(propertyDescriptor
 -> {
 
-            if (ignored.contains(propertyDescriptor.getName())) {
+            if (isIgnored(value.getClass(), propertyDescriptor)) {
                return false;
             }
             final Method descriptorReadMethod = 
propertyDescriptor.getReadMethod();
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 94b0d234ad..d70a786a0d 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
@@ -16,6 +16,7 @@
  */
 package org.apache.activemq.artemis.core.config.impl;
 
+
 import static 
org.apache.activemq.artemis.core.config.impl.ConfigurationImpl.REDACTED;
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -60,11 +61,13 @@ import java.util.stream.Collectors;
 
 import org.apache.activemq.artemis.ArtemisConstants;
 import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
+import org.apache.activemq.artemis.api.core.QueueConfiguration;
 import org.apache.activemq.artemis.api.core.RoutingType;
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.api.core.TransportConfiguration;
 import org.apache.activemq.artemis.core.config.Configuration;
 import org.apache.activemq.artemis.core.config.ConfigurationUtils;
+import org.apache.activemq.artemis.core.config.CoreAddressConfiguration;
 import org.apache.activemq.artemis.core.config.HAPolicyConfiguration;
 import org.apache.activemq.artemis.core.config.LockCoordinatorConfiguration;
 import org.apache.activemq.artemis.core.config.ScaleDownConfiguration;
@@ -3067,6 +3070,47 @@ public class ConfigurationImplTest extends 
AbstractConfigurationTestBase {
       assertEquals("", 
configuration.getAcceptorConfigurations().stream().findFirst().get().getCombinedParams().get("useKQueue"));
    }
 
+   @Test
+   public void testDeprecatedConfigsAreNotExportedAsProperties() throws 
Exception {
+      ConfigurationImpl configuration = new ConfigurationImpl();
+      
configuration.addQueueConfiguration(QueueConfiguration.of("shouldNotBeHere"));
+
+      configuration.addAddressConfiguration(new 
CoreAddressConfiguration().setName("test").addQueueConfiguration(QueueConfiguration.of("test").setAddress("test").setRoutingType(RoutingType.ANYCAST)).addRoutingType(RoutingType.ANYCAST));
+
+      CoreAddressConfiguration carAddress = new CoreAddressConfiguration();
+      carAddress.setName("CarOrders");
+      carAddress.addRoutingType(RoutingType.MULTICAST);
+
+      
carAddress.addQueueConfiguration(QueueConfiguration.of("tires").setRoutingType(RoutingType.MULTICAST));
+      
carAddress.addQueueConfiguration(QueueConfiguration.of("batteries").setRoutingType(RoutingType.MULTICAST));
+      configuration.addAddressConfiguration(carAddress);
+
+      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);
+      }
+
+      AtomicBoolean foundTires = new AtomicBoolean(false);
+      AtomicBoolean foundBatteries = new AtomicBoolean(false);
+      assertFalse(properties.isEmpty());
+      properties.forEach((a, b) -> {
+         assertFalse(String.valueOf(a).contains("queueConfigurations"));
+         assertFalse(String.valueOf(b).contains("shouldNotBeHere"));
+         if (String.valueOf(b).equals("batteries")) {
+            foundBatteries.set(true);
+         }
+         if (String.valueOf(b).equals("tires")) {
+            foundTires.set(true);
+         }
+      });
+      assertTrue(foundBatteries.get());
+      assertTrue(foundTires.get());
+      assertTrue(properties.containsKey("addressConfigurations.test.name"));
+      
assertTrue(properties.containsKey("addressConfigurations.test.queueConfigs.test.name"));
+   }
+
    /**
     * Verifies the lock coordinator configuration parsing and export process:
     * <ul>
diff --git 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
index 43cf9d1896..4dead4742a 100644
--- 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
+++ 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
@@ -185,6 +185,10 @@ public class FileConfigurationTest extends 
AbstractConfigurationTestBase {
    }
 
    private void validateFullConfig(Configuration configInstance) {
+      validateFullConfig(configInstance, false);
+   }
+
+   private void validateFullConfig(Configuration configInstance, boolean 
fromProperties) {
       // Check they match the values from the test file
       assertEquals("SomeNameForUseOnTheApplicationServer", 
configInstance.getName());
       assertFalse(configInstance.isPersistenceEnabled());
@@ -610,20 +614,22 @@ public class FileConfigurationTest extends 
AbstractConfigurationTestBase {
       assertEquals(104, 
configInstance.getResourceLimitSettings().get("myUser").getMaxSessions());
       assertEquals(13, 
configInstance.getResourceLimitSettings().get("myUser").getMaxQueues());
 
-      assertEquals(2, configInstance.getQueueConfigs().size());
-
-      assertEquals("queue1", 
configInstance.getQueueConfigs().get(0).getName().toString());
-      assertEquals("address1", 
configInstance.getQueueConfigs().get(0).getAddress().toString());
-      assertEquals("color='red'", 
configInstance.getQueueConfigs().get(0).getFilterString().toString());
-      assertNotNull(configInstance.getQueueConfigs().get(0).isDurable());
-      assertFalse(configInstance.getQueueConfigs().get(0).isDurable());
-
-      assertEquals("queue2", 
configInstance.getQueueConfigs().get(1).getName().toString());
-      assertEquals("address2", 
configInstance.getQueueConfigs().get(1).getAddress().toString());
-      assertEquals("color='blue'", 
configInstance.getQueueConfigs().get(1).getFilterString().toString());
-      assertNotNull(configInstance.getQueueConfigs().get(1).isDurable());
-      assertFalse(configInstance.getQueueConfigs().get(1).isDurable());
-
+      if (!fromProperties) {
+         // we don't export deprecated entries
+         assertEquals(2, configInstance.getQueueConfigs().size());
+
+         assertEquals("queue1", 
configInstance.getQueueConfigs().get(0).getName().toString());
+         assertEquals("address1", 
configInstance.getQueueConfigs().get(0).getAddress().toString());
+         assertEquals("color='red'", 
configInstance.getQueueConfigs().get(0).getFilterString().toString());
+         assertNotNull(configInstance.getQueueConfigs().get(0).isDurable());
+         assertFalse(configInstance.getQueueConfigs().get(0).isDurable());
+
+         assertEquals("queue2", 
configInstance.getQueueConfigs().get(1).getName().toString());
+         assertEquals("address2", 
configInstance.getQueueConfigs().get(1).getAddress().toString());
+         assertEquals("color='blue'", 
configInstance.getQueueConfigs().get(1).getFilterString().toString());
+         assertNotNull(configInstance.getQueueConfigs().get(1).isDurable());
+         assertFalse(configInstance.getQueueConfigs().get(1).isDurable());
+      }
       verifyAddresses();
 
       Map<String, Set<Role>> roles = configInstance.getSecurityRoles();
@@ -1048,7 +1054,7 @@ public class FileConfigurationTest extends 
AbstractConfigurationTestBase {
 
       assertTrue(REDACTED.equals(configuration.getClusterPassword()));
       configuration.setClusterPassword("Wombat");
-      validateFullConfig(configuration);
+      validateFullConfig(configuration, true);
    }
 
    private Configuration createConfiguration(String filename) throws Exception 
{


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to