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

brusdev pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/main by this push:
     new 4e77a34c29 ARTEMIS-4243 Fix export of bindings without routing types
4e77a34c29 is described below

commit 4e77a34c29d20242d2375271bc21a408ac4691b4
Author: Domenico Francesco Bruscino <[email protected]>
AuthorDate: Mon Apr 17 10:43:49 2023 +0200

    ARTEMIS-4243 Fix export of bindings without routing types
---
 .../cli/commands/tools/xml/XmlDataExporter.java    |  9 +++---
 .../persistence/XmlImportExportTest.java           | 36 ++++++++++++++++++++++
 2 files changed, 40 insertions(+), 5 deletions(-)

diff --git 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/xml/XmlDataExporter.java
 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/xml/XmlDataExporter.java
index bb928873e6..33c49d9889 100644
--- 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/xml/XmlDataExporter.java
+++ 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/xml/XmlDataExporter.java
@@ -67,6 +67,7 @@ import 
org.apache.activemq.artemis.utils.collections.LinkedListIterator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import java.lang.invoke.MethodHandles;
+import java.util.stream.Collectors;
 
 @Command(name = "exp", description = "Export all message-data using an XML 
that could be interpreted by any system.")
 public final class XmlDataExporter extends DBOption {
@@ -340,11 +341,9 @@ public final class XmlDataExporter extends DBOption {
       for (Map.Entry<Long, PersistentAddressBindingEncoding> 
addressBindingEncodingEntry : addressBindings.entrySet()) {
          PersistentAddressBindingEncoding bindingEncoding = 
addressBindings.get(addressBindingEncodingEntry.getKey());
          xmlWriter.writeEmptyElement(XmlDataConstants.ADDRESS_BINDINGS_CHILD);
-         StringBuilder routingTypes = new StringBuilder();
-         for (RoutingType routingType : bindingEncoding.getRoutingTypes()) {
-            routingTypes.append(routingType.toString()).append(", ");
-         }
-         
xmlWriter.writeAttribute(XmlDataConstants.ADDRESS_BINDING_ROUTING_TYPE, 
routingTypes.toString().substring(0, routingTypes.length() - 2));
+         String routingTypes = bindingEncoding.getRoutingTypes().stream().
+            map(Enum::toString).collect(Collectors.joining(","));
+         
xmlWriter.writeAttribute(XmlDataConstants.ADDRESS_BINDING_ROUTING_TYPE, 
routingTypes);
          xmlWriter.writeAttribute(XmlDataConstants.ADDRESS_BINDING_NAME, 
bindingEncoding.getName().toString());
          xmlWriter.writeAttribute(XmlDataConstants.ADDRESS_BINDING_ID, 
Long.toString(bindingEncoding.getId()));
          bindingsPrinted++;
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/persistence/XmlImportExportTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/persistence/XmlImportExportTest.java
index 17dc90e400..09421202ec 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/persistence/XmlImportExportTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/persistence/XmlImportExportTest.java
@@ -1164,6 +1164,42 @@ public class XmlImportExportTest extends 
ActiveMQTestBase {
       
assertTrue(server.getAddressInfo(myAddress).getRoutingTypes().contains(RoutingType.MULTICAST));
    }
 
+   @Test
+   public void testEmptyRoutingTypes() throws Exception {
+      SimpleString myAddress = SimpleString.toSimpleString("myAddress");
+      ClientSession session = basicSetUp();
+
+      EnumSet<RoutingType> routingTypes = EnumSet.noneOf(RoutingType.class);
+
+      session.createAddress(myAddress, routingTypes, false);
+
+      locator.close();
+      server.stop();
+
+      ByteArrayOutputStream xmlOutputStream = new ByteArrayOutputStream();
+      XmlDataExporter xmlDataExporter = new XmlDataExporter();
+      xmlDataExporter.process(xmlOutputStream, 
server.getConfiguration().getBindingsDirectory(), 
server.getConfiguration().getJournalDirectory(), 
server.getConfiguration().getPagingDirectory(), 
server.getConfiguration().getLargeMessagesDirectory());
+      if (logger.isDebugEnabled()) {
+         logger.debug(new String(xmlOutputStream.toByteArray()));
+      }
+
+      clearDataRecreateServerDirs();
+      server.start();
+      checkForLongs();
+      locator = createInVMNonHALocator();
+      factory = locator.createSessionFactory();
+      session = factory.createSession(false, false, true);
+      ClientSession managementSession = factory.createSession(false, true, 
true);
+
+      ByteArrayInputStream xmlInputStream = new 
ByteArrayInputStream(xmlOutputStream.toByteArray());
+      XmlDataImporter xmlDataImporter = new XmlDataImporter();
+      xmlDataImporter.validate(xmlInputStream);
+      xmlInputStream.reset();
+      xmlDataImporter.process(xmlInputStream, session, managementSession);
+
+      assertEquals(0, 
server.getAddressInfo(myAddress).getRoutingTypes().size());
+   }
+
    @Test
    public void testImportWrongRoutingType() throws Exception {
       SimpleString myAddress = SimpleString.toSimpleString("myAddress");

Reply via email to