You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/08/20 10:26:13 UTC

[james-project] 07/16: JAMES-2855 Handling XML loading

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

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 1e4bcda6e2aad60f6331e7aa821b205c4dead3aa
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Mon Aug 19 11:54:18 2019 +0700

    JAMES-2855 Handling XML loading
---
 .../QuotaMailingListenerConfigurationTest.java     | 32 +++++++----------
 .../configuration/FileConfigurationProvider.java   | 29 ++++++++-------
 .../mailbox/MailboxListenersLoaderImplTest.java    | 25 ++++++-------
 .../mailbox/PreDeletionHooksConfigurationTest.java | 21 ++++++-----
 server/container/jetty/pom.xml                     |  5 +++
 .../http/jetty/JettyHttpServerFactoryTest.java     | 27 +++++---------
 .../lifecycle/osgi/OSGIConfigurationProvider.java  | 23 ++++--------
 server/dns-service/dnsservice-dnsjava/pom.xml      |  5 +++
 .../dnsservice/dnsjava/DNSJavaServiceTest.java     |  7 ++--
 .../mailetcontainer/impl/MailetConfigImplTest.java | 42 +++++++++++++---------
 .../lib/AbstractStateCompositeProcessorTest.java   | 33 +++++++++--------
 .../lib/AbstractStateMailetProcessorTest.java      | 10 +++---
 12 files changed, 125 insertions(+), 134 deletions(-)

diff --git a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/QuotaMailingListenerConfigurationTest.java b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/QuotaMailingListenerConfigurationTest.java
index 9f76365..cff7d75 100644
--- a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/QuotaMailingListenerConfigurationTest.java
+++ b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/QuotaMailingListenerConfigurationTest.java
@@ -28,9 +28,10 @@ import java.nio.charset.StandardCharsets;
 import java.time.Duration;
 import java.util.Optional;
 
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.commons.configuration2.XMLConfiguration;
 import org.apache.james.mailbox.quota.mailing.QuotaMailingListenerConfiguration.RenderingInformation;
 import org.apache.james.mailbox.quota.model.QuotaThreshold;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.junit.jupiter.api.Test;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
@@ -52,8 +53,7 @@ public class QuotaMailingListenerConfigurationTest {
 
     @Test
     public void fromShouldReadXMLConfiguration() throws Exception {
-        DefaultConfigurationBuilder xmlConfiguration = new DefaultConfigurationBuilder();
-        xmlConfiguration.load(toStream(
+        XMLConfiguration xmlConfiguration = FileConfigurationProvider.getConfig(toStream(
             "<configuration>\n" +
                 "  <thresholds>\n" +
                 "    <threshold>" +
@@ -90,8 +90,7 @@ public class QuotaMailingListenerConfigurationTest {
 
     @Test
     public void fromShouldReadXMLConfigurationWhenRenderingInformationPartiallyOmited() throws Exception {
-        DefaultConfigurationBuilder xmlConfiguration = new DefaultConfigurationBuilder();
-        xmlConfiguration.load(toStream(
+        XMLConfiguration xmlConfiguration = FileConfigurationProvider.getConfig(toStream(
             "<configuration>\n" +
                 "  <thresholds>\n" +
                 "    <threshold>" +
@@ -127,8 +126,7 @@ public class QuotaMailingListenerConfigurationTest {
 
     @Test
     public void fromShouldAcceptEmptyThreshold() throws Exception {
-        DefaultConfigurationBuilder xmlConfiguration = new DefaultConfigurationBuilder();
-        xmlConfiguration.load(toStream(
+        XMLConfiguration xmlConfiguration = FileConfigurationProvider.getConfig(toStream(
             "<configuration>\n" +
                 "  <thresholds></thresholds>\n" +
                 "  <gracePeriod>3 days</gracePeriod>\n" +
@@ -144,8 +142,7 @@ public class QuotaMailingListenerConfigurationTest {
 
     @Test
     public void fromShouldReturnDefaultWhenEmptyConfiguration() throws Exception {
-        DefaultConfigurationBuilder xmlConfiguration = new DefaultConfigurationBuilder();
-        xmlConfiguration.load(toStream(
+        XMLConfiguration xmlConfiguration = FileConfigurationProvider.getConfig(toStream(
             "<configuration></configuration>"));
 
         QuotaMailingListenerConfiguration result = QuotaMailingListenerConfiguration.from(xmlConfiguration);
@@ -164,8 +161,7 @@ public class QuotaMailingListenerConfigurationTest {
 
     @Test
     public void fromShouldThrowOnNonParsableGracePeriod() throws Exception {
-        DefaultConfigurationBuilder xmlConfiguration = new DefaultConfigurationBuilder();
-        xmlConfiguration.load(toStream(
+        XMLConfiguration xmlConfiguration = FileConfigurationProvider.getConfig(toStream(
             "<configuration><gracePeriod>nonParsable</gracePeriod></configuration>"));
 
         assertThatThrownBy(() -> QuotaMailingListenerConfiguration.from(xmlConfiguration))
@@ -174,8 +170,7 @@ public class QuotaMailingListenerConfigurationTest {
 
     @Test
     public void fromShouldThrowOnNegativeGracePeriod() throws Exception {
-        DefaultConfigurationBuilder xmlConfiguration = new DefaultConfigurationBuilder();
-        xmlConfiguration.load(toStream(
+        XMLConfiguration xmlConfiguration = FileConfigurationProvider.getConfig(toStream(
             "<configuration><gracePeriod>-12 ms</gracePeriod></configuration>"));
 
         assertThatThrownBy(() -> QuotaMailingListenerConfiguration.from(xmlConfiguration))
@@ -184,8 +179,7 @@ public class QuotaMailingListenerConfigurationTest {
 
     @Test
     public void fromShouldLoadGracePeriodInMs() throws Exception {
-        DefaultConfigurationBuilder xmlConfiguration = new DefaultConfigurationBuilder();
-        xmlConfiguration.load(toStream(
+        XMLConfiguration xmlConfiguration = FileConfigurationProvider.getConfig(toStream(
             "<configuration><gracePeriod>12 ms</gracePeriod></configuration>"));
 
         assertThat(QuotaMailingListenerConfiguration.from(xmlConfiguration).getGracePeriod())
@@ -194,8 +188,7 @@ public class QuotaMailingListenerConfigurationTest {
 
     @Test
     public void defaultUnitShouldBeMilliseconds() throws Exception {
-        DefaultConfigurationBuilder xmlConfiguration = new DefaultConfigurationBuilder();
-        xmlConfiguration.load(toStream(
+        XMLConfiguration xmlConfiguration = FileConfigurationProvider.getConfig(toStream(
             "<configuration><gracePeriod>12</gracePeriod></configuration>"));
 
         assertThat(QuotaMailingListenerConfiguration.from(xmlConfiguration).getGracePeriod())
@@ -204,7 +197,7 @@ public class QuotaMailingListenerConfigurationTest {
 
     @Test
     public void fromShouldThrowOnEmptySubjectTemplate() throws Exception {
-        DefaultConfigurationBuilder xmlConfiguration = new DefaultConfigurationBuilder();xmlConfiguration.load(toStream(
+        XMLConfiguration xmlConfiguration = FileConfigurationProvider.getConfig(toStream(
             "<configuration>\n" +
                 "  <thresholds>\n" +
                 "    <threshold>" +
@@ -223,7 +216,7 @@ public class QuotaMailingListenerConfigurationTest {
 
     @Test
     public void fromShouldThrowOnEmptyBodyTemplate() throws Exception {
-        DefaultConfigurationBuilder xmlConfiguration = new DefaultConfigurationBuilder();xmlConfiguration.load(toStream(
+        XMLConfiguration xmlConfiguration = FileConfigurationProvider.getConfig(toStream(
             "<configuration>\n" +
                 "  <thresholds>\n" +
                 "    <threshold>" +
@@ -242,5 +235,4 @@ public class QuotaMailingListenerConfigurationTest {
     private InputStream toStream(String string) {
         return new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8));
     }
-
 }
\ No newline at end of file
diff --git a/server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java b/server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java
index b36db81..9aa2b87 100644
--- a/server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java
+++ b/server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java
@@ -24,10 +24,13 @@ import java.io.InputStream;
 import java.util.List;
 import java.util.Optional;
 
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.commons.configuration.PropertiesConfiguration;
-import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.commons.configuration2.HierarchicalConfiguration;
+import org.apache.commons.configuration2.XMLConfiguration;
+import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
+import org.apache.commons.configuration2.builder.fluent.Parameters;
+import org.apache.commons.configuration2.convert.DisabledListDelimiterHandler;
+import org.apache.commons.configuration2.ex.ConfigurationException;
+import org.apache.commons.configuration2.io.FileHandler;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.util.LoggingLevel;
 import org.slf4j.Logger;
@@ -42,17 +45,19 @@ public class FileConfigurationProvider implements ConfigurationProvider {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(FileConfigurationProvider.class);
     private static final String CONFIGURATION_FILE_SUFFIX = ".xml";
-    private static final char SEMICOLON = ';';
 
-    public static final HierarchicalConfiguration EMPTY_CONFIGURATION = new HierarchicalConfiguration();
+    public static final HierarchicalConfiguration EMPTY_CONFIGURATION = new XMLConfiguration();
 
     public static XMLConfiguration getConfig(InputStream configStream) throws ConfigurationException {
-        PropertiesConfiguration.setDefaultListDelimiter(SEMICOLON);
-        XMLConfiguration config = new XMLConfiguration();
-        config.setDelimiterParsingDisabled(true);
-        config.setAttributeSplittingDisabled(true);
-        config.load(configStream);
-        return config;
+        FileBasedConfigurationBuilder<XMLConfiguration> builder = new FileBasedConfigurationBuilder<>(XMLConfiguration.class)
+            .configure(new Parameters()
+                .xml()
+                .setListDelimiterHandler(new DisabledListDelimiterHandler()));
+        XMLConfiguration xmlConfiguration = builder.getConfiguration();
+        FileHandler fileHandler = new FileHandler(xmlConfiguration);
+        fileHandler.load(configStream);
+
+        return xmlConfiguration;
     }
     
     private final FileSystem fileSystem;
diff --git a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
index 9ca87b4..d3d33eb 100644
--- a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
+++ b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
@@ -26,10 +26,11 @@ import static org.mockito.Mockito.when;
 
 import java.io.ByteArrayInputStream;
 import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.commons.configuration2.XMLConfiguration;
+import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.mailbox.events.GenericGroup;
@@ -38,6 +39,7 @@ import org.apache.james.mailbox.events.InVMEventBus;
 import org.apache.james.mailbox.events.MailboxListener;
 import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.metrics.api.NoopMetricFactory;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.apache.james.utils.ExtendedClassLoader;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -101,8 +103,8 @@ class MailboxListenersLoaderImplTest {
     }
 
     @Test
-    void configureShouldAddMailboxListenersWhenConfigurationIsGood() throws ConfigurationException {
-        DefaultConfigurationBuilder configuration = toConfigutation("<listeners>" +
+    void configureShouldAddMailboxListenersWhenConfigurationIsGood() throws Exception {
+        XMLConfiguration configuration = toConfigutation("<listeners>" +
                     "<listener>" +
                         "<class>org.apache.james.modules.mailbox.NoopMailboxListener</class>" +
                     "</listener>" +
@@ -114,8 +116,8 @@ class MailboxListenersLoaderImplTest {
     }
 
     @Test
-    void customGroupCanBePassed() throws ConfigurationException {
-        DefaultConfigurationBuilder configuration = toConfigutation("<listeners>" +
+    void customGroupCanBePassed() throws Exception {
+        XMLConfiguration configuration = toConfigutation("<listeners>" +
                     "<listener>" +
                         "<class>org.apache.james.modules.mailbox.NoopMailboxListener</class>" +
                         "<group>Avengers</group>" +
@@ -128,8 +130,8 @@ class MailboxListenersLoaderImplTest {
     }
 
     @Test
-    void aListenerCanBeRegisteredOnSeveralGroups() throws ConfigurationException {
-        DefaultConfigurationBuilder configuration = toConfigutation("<listeners>" +
+    void aListenerCanBeRegisteredOnSeveralGroups() throws Exception {
+        XMLConfiguration configuration = toConfigutation("<listeners>" +
                     "<listener>" +
                         "<class>org.apache.james.modules.mailbox.NoopMailboxListener</class>" +
                         "<group>Avengers</group>" +
@@ -145,9 +147,8 @@ class MailboxListenersLoaderImplTest {
         assertThat(eventBus.registeredGroups()).containsExactlyInAnyOrder(new GenericGroup("Avengers"), new GenericGroup("Fantastic 4"));
     }
 
-    private DefaultConfigurationBuilder toConfigutation(String configurationString) throws ConfigurationException {
-        DefaultConfigurationBuilder configuration = new DefaultConfigurationBuilder();
-        configuration.load(new ByteArrayInputStream(configurationString.getBytes(StandardCharsets.UTF_8)));
-        return configuration;
+    private XMLConfiguration toConfigutation(String configurationString) throws ConfigurationException, IOException {
+        return FileConfigurationProvider
+            .getConfig(new ByteArrayInputStream(configurationString.getBytes(StandardCharsets.UTF_8)));
     }
 }
diff --git a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHooksConfigurationTest.java b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHooksConfigurationTest.java
index f14a977..a98a4ba 100644
--- a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHooksConfigurationTest.java
+++ b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHooksConfigurationTest.java
@@ -25,9 +25,11 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import java.io.ByteArrayInputStream;
 import java.nio.charset.StandardCharsets;
 
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.commons.configuration2.BaseHierarchicalConfiguration;
+import org.apache.commons.configuration2.HierarchicalConfiguration;
+import org.apache.commons.configuration2.XMLConfiguration;
+import org.apache.commons.configuration2.ex.ConfigurationException;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.junit.jupiter.api.Test;
 
 import com.google.common.collect.ImmutableList;
@@ -43,7 +45,7 @@ class PreDeletionHooksConfigurationTest {
 
     @Test
     void fromShouldReturnNoneWhenEmpty() throws Exception {
-        HierarchicalConfiguration configuration = new HierarchicalConfiguration();
+        HierarchicalConfiguration configuration = new BaseHierarchicalConfiguration();
 
         assertThat(PreDeletionHooksConfiguration.from(configuration))
             .isEqualTo(PreDeletionHooksConfiguration.none());
@@ -51,8 +53,7 @@ class PreDeletionHooksConfigurationTest {
 
     @Test
     void fromShouldThrowWhenInvalidHookConfiguration() throws Exception {
-        XMLConfiguration configuration = new XMLConfiguration();
-        configuration.load(new ByteArrayInputStream((
+        XMLConfiguration configuration = FileConfigurationProvider.getConfig(new ByteArrayInputStream((
             "<preDeletionHooks>" +
                 "  <preDeletionHook>" +
                 "    <class></class>" +
@@ -60,7 +61,7 @@ class PreDeletionHooksConfigurationTest {
                 "</preDeletionHooks>")
             .getBytes(StandardCharsets.UTF_8)));
 
-        HierarchicalConfiguration invalidConfigurationEntry = new HierarchicalConfiguration();
+        HierarchicalConfiguration invalidConfigurationEntry = new BaseHierarchicalConfiguration();
         configuration.addProperty(PreDeletionHooksConfiguration.CONFIGURATION_ENTRY_NAME, ImmutableList.of(invalidConfigurationEntry));
 
         assertThatThrownBy(() -> PreDeletionHooksConfiguration.from(configuration))
@@ -69,8 +70,7 @@ class PreDeletionHooksConfigurationTest {
 
     @Test
     void fromShouldReturnConfiguredEntry() throws Exception {
-        XMLConfiguration configuration = new XMLConfiguration();
-        configuration.load(new ByteArrayInputStream((
+        XMLConfiguration configuration = FileConfigurationProvider.getConfig(new ByteArrayInputStream((
             "<preDeletionHooks>" +
             "  <preDeletionHook>" +
             "    <class>a.class</class>" +
@@ -85,8 +85,7 @@ class PreDeletionHooksConfigurationTest {
 
     @Test
     void fromShouldReturnAllConfiguredEntries() throws Exception {
-        XMLConfiguration configuration = new XMLConfiguration();
-        configuration.load(new ByteArrayInputStream((
+        XMLConfiguration configuration = FileConfigurationProvider.getConfig(new ByteArrayInputStream((
             "<preDeletionHooks>" +
             "  <preDeletionHook>" +
             "    <class>a.class</class>" +
diff --git a/server/container/jetty/pom.xml b/server/container/jetty/pom.xml
index 0576690..13d8668 100644
--- a/server/container/jetty/pom.xml
+++ b/server/container/jetty/pom.xml
@@ -39,6 +39,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-util</artifactId>
         </dependency>
         <dependency>
diff --git a/server/container/jetty/src/test/java/org/apache/james/http/jetty/JettyHttpServerFactoryTest.java b/server/container/jetty/src/test/java/org/apache/james/http/jetty/JettyHttpServerFactoryTest.java
index 76e1ff3..35a7863 100644
--- a/server/container/jetty/src/test/java/org/apache/james/http/jetty/JettyHttpServerFactoryTest.java
+++ b/server/container/jetty/src/test/java/org/apache/james/http/jetty/JettyHttpServerFactoryTest.java
@@ -21,28 +21,19 @@ package org.apache.james.http.jetty;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
-import java.io.InputStream;
 import java.util.List;
 
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.commons.configuration2.HierarchicalConfiguration;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableMap;
 
 public class JettyHttpServerFactoryTest {
 
-    private HierarchicalConfiguration loadConfiguration(InputStream configuration) throws org.apache.commons.configuration.ConfigurationException {
-        XMLConfiguration config = new XMLConfiguration();
-        config.setDelimiterParsingDisabled(true);
-        config.setAttributeSplittingDisabled(true);
-        config.load(configuration);
-        return config;
-    }
-    
     @Test
     public void shouldCreateServersAsDescribedInXmlConfiguration() throws Exception {
-        HierarchicalConfiguration configuration = loadConfiguration(ClassLoader.getSystemResourceAsStream("httpserver.xml"));
+        HierarchicalConfiguration configuration = FileConfigurationProvider.getConfig(ClassLoader.getSystemResourceAsStream("httpserver.xml"));
         List<JettyHttpServer> servers = new JettyHttpServerFactory().createServers(configuration);
         assertThat(servers).extracting(JettyHttpServer::getConfiguration)
             .containsOnly(Configuration.builder()
@@ -63,26 +54,26 @@ public class JettyHttpServerFactoryTest {
 
     @Test
     public void shouldThrowOnEmptyServletName() throws Exception {
-        HierarchicalConfiguration configuration = loadConfiguration(ClassLoader.getSystemResourceAsStream("emptyservletname.xml"));
+        HierarchicalConfiguration configuration = FileConfigurationProvider.getConfig(ClassLoader.getSystemResourceAsStream("emptyservletname.xml"));
         assertThatThrownBy(() -> new JettyHttpServerFactory().createServers(configuration)).isInstanceOf(ConfigurationException.class);
     }
 
     @Test
     public void shouldThrowOnUnavailableServletName() throws Exception {
-        HierarchicalConfiguration configuration = loadConfiguration(ClassLoader.getSystemResourceAsStream("unavailableservletname.xml"));
+        HierarchicalConfiguration configuration = FileConfigurationProvider.getConfig(ClassLoader.getSystemResourceAsStream("unavailableservletname.xml"));
         assertThatThrownBy(() -> new JettyHttpServerFactory().createServers(configuration)).isInstanceOf(ConfigurationException.class);
     }
     
     @Test
     public void shouldThrowOnConflictingPortConfiguration() throws Exception {
-        HierarchicalConfiguration configuration = loadConfiguration(ClassLoader.getSystemResourceAsStream("conflictingport.xml"));
+        HierarchicalConfiguration configuration = FileConfigurationProvider.getConfig(ClassLoader.getSystemResourceAsStream("conflictingport.xml"));
         assertThatThrownBy(() -> new JettyHttpServerFactory().createServers(configuration)).isInstanceOf(ConfigurationException.class);
     }
     
     @SuppressWarnings("unchecked")
     @Test
     public void shouldBeAbleToLoadEmptyMappingConfiguration() throws Exception {
-        HierarchicalConfiguration configuration = loadConfiguration(ClassLoader.getSystemResourceAsStream("emptymappingconfiguration.xml"));
+        HierarchicalConfiguration configuration = FileConfigurationProvider.getConfig(ClassLoader.getSystemResourceAsStream("emptymappingconfiguration.xml"));
         assertThat(new JettyHttpServerFactory().createServers(configuration))
             .extracting(server -> server.getConfiguration().getMappings())
             .containsOnly(ImmutableMap.of());
@@ -90,13 +81,13 @@ public class JettyHttpServerFactoryTest {
 
     @Test
     public void shouldThrowOnEmptyFilterName() throws Exception {
-        HierarchicalConfiguration configuration = loadConfiguration(ClassLoader.getSystemResourceAsStream("emptyfiltername.xml"));
+        HierarchicalConfiguration configuration = FileConfigurationProvider.getConfig(ClassLoader.getSystemResourceAsStream("emptyfiltername.xml"));
         assertThatThrownBy(() -> new JettyHttpServerFactory().createServers(configuration)).isInstanceOf(ConfigurationException.class);
     }
 
     @Test
     public void shouldThrowOnUnavailableFilterName() throws Exception {
-        HierarchicalConfiguration configuration = loadConfiguration(ClassLoader.getSystemResourceAsStream("unavailablefiltername.xml"));
+        HierarchicalConfiguration configuration = FileConfigurationProvider.getConfig(ClassLoader.getSystemResourceAsStream("unavailablefiltername.xml"));
         assertThatThrownBy(() -> new JettyHttpServerFactory().createServers(configuration)).isInstanceOf(ConfigurationException.class);
     }
     
diff --git a/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/osgi/OSGIConfigurationProvider.java b/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/osgi/OSGIConfigurationProvider.java
index 65042fd..6249e3a 100644
--- a/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/osgi/OSGIConfigurationProvider.java
+++ b/server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/osgi/OSGIConfigurationProvider.java
@@ -19,11 +19,11 @@
 package org.apache.james.container.spring.lifecycle.osgi;
 
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
+import java.io.IOException;
 
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.commons.configuration2.HierarchicalConfiguration;
+import org.apache.commons.configuration2.ex.ConfigurationException;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
 
 public class OSGIConfigurationProvider implements org.apache.james.container.spring.lifecycle.ConfigurationProvider {
 
@@ -34,20 +34,11 @@ public class OSGIConfigurationProvider implements org.apache.james.container.spr
 
     @Override
     public HierarchicalConfiguration getConfiguration(String beanName) throws ConfigurationException {
-        XMLConfiguration config = new XMLConfiguration();
         FileInputStream fis = null;
-        config.setDelimiterParsingDisabled(true);
-        
-        // Don't split attributes which can have bad side-effects with matcher-conditions.
-        // See JAMES-1233
-        config.setAttributeSplittingDisabled(true);
-        
-        // Use InputStream so we are not bound to File implementations of the
-        // config
         try {
             fis = new FileInputStream("/tmp/" + beanName + ".xml");
-            config.load(fis);
-        } catch (FileNotFoundException e) {
+            return FileConfigurationProvider.getConfig(fis);
+        } catch (IOException e) {
             throw new ConfigurationException("Bean " + beanName);
         } finally {
             if (fis != null) {
@@ -58,8 +49,6 @@ public class OSGIConfigurationProvider implements org.apache.james.container.spr
                 }
             }
         }
-        
-        return config;
     }
 
 }
diff --git a/server/dns-service/dnsservice-dnsjava/pom.xml b/server/dns-service/dnsservice-dnsjava/pom.xml
index d3c10c8..83aa0e7 100644
--- a/server/dns-service/dnsservice-dnsjava/pom.xml
+++ b/server/dns-service/dnsservice-dnsjava/pom.xml
@@ -35,6 +35,11 @@
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-dnsservice-api</artifactId>
         </dependency>
         <dependency>
diff --git a/server/dns-service/dnsservice-dnsjava/src/test/java/org/apache/james/dnsservice/dnsjava/DNSJavaServiceTest.java b/server/dns-service/dnsservice-dnsjava/src/test/java/org/apache/james/dnsservice/dnsjava/DNSJavaServiceTest.java
index ce3f7eb..f95426c 100644
--- a/server/dns-service/dnsservice-dnsjava/src/test/java/org/apache/james/dnsservice/dnsjava/DNSJavaServiceTest.java
+++ b/server/dns-service/dnsservice-dnsjava/src/test/java/org/apache/james/dnsservice/dnsjava/DNSJavaServiceTest.java
@@ -31,8 +31,8 @@ import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
 import org.apache.james.metrics.api.NoopMetricFactory;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -65,11 +65,8 @@ public class DNSJavaServiceTest {
     @Before
     public void setUp() throws Exception {
         dnsServer = new TestableDNSServer();
-        DefaultConfigurationBuilder db = new DefaultConfigurationBuilder();
 
-        db.load(new ByteArrayInputStream(DNS_SERVER_CONFIG));
-
-        dnsServer.configure(db);
+        dnsServer.configure(FileConfigurationProvider.getConfig(new ByteArrayInputStream(DNS_SERVER_CONFIG)));
         dnsServer.init();
 
         defaultCache = Lookup.getDefaultCache(DClass.IN);
diff --git a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/MailetConfigImplTest.java b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/MailetConfigImplTest.java
index cd3c012..1ad3c87 100644
--- a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/MailetConfigImplTest.java
+++ b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/MailetConfigImplTest.java
@@ -25,27 +25,38 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.commons.configuration2.XMLConfiguration;
+import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
+import org.apache.commons.configuration2.builder.fluent.Parameters;
+import org.apache.commons.configuration2.convert.DisabledListDelimiterHandler;
+import org.apache.commons.configuration2.ex.ConfigurationException;
+import org.apache.commons.configuration2.io.FileHandler;
 import org.junit.Before;
 import org.junit.Test;
 
 public class MailetConfigImplTest {
 
-    private DefaultConfigurationBuilder builder;
+    private XMLConfiguration xmlConfiguration;
+    private FileHandler fileHandler;
     private MailetConfigImpl config;
 
     @Before
     public void setUp() throws Exception {
-        builder = new DefaultConfigurationBuilder();
+        FileBasedConfigurationBuilder<XMLConfiguration> builder = new FileBasedConfigurationBuilder<>(XMLConfiguration.class)
+            .configure(new Parameters()
+                .xml()
+                .setListDelimiterHandler(new DisabledListDelimiterHandler()));
+        xmlConfiguration = builder.getConfiguration();
+        fileHandler = new FileHandler(xmlConfiguration);
+
         config = new MailetConfigImpl();
     }
 
     @Test
-    public void testDotParamsFromXML() throws ConfigurationException {
-        builder.load(new ByteArrayInputStream("<mailet><mail.debug>true</mail.debug></mailet>".getBytes()));
+    public void testDotParamsFromXML() throws Exception {
+        fileHandler.load(new ByteArrayInputStream("<mailet><mail.debug>true</mail.debug></mailet>".getBytes()));
 
-        config.setConfiguration(builder);
+        config.setConfiguration(xmlConfiguration);
 
         String param = config.getInitParameterNames().next();
         assertThat(param).isEqualTo("mail.debug");
@@ -54,9 +65,9 @@ public class MailetConfigImplTest {
 
     @Test
     public void testDotParamsFromConfig() throws ConfigurationException {
-        builder.addProperty("mail.debug", "true");
+        xmlConfiguration.addProperty("mail.debug", "true");
 
-        config.setConfiguration(builder);
+        config.setConfiguration(xmlConfiguration);
 
         String param = config.getInitParameterNames().next();
         assertThat(param).isEqualTo("mail.debug");
@@ -65,10 +76,10 @@ public class MailetConfigImplTest {
 
     // See JAMES-1232
     @Test
-    public void testParamWithComma() throws ConfigurationException {
-        builder.load(new ByteArrayInputStream("<mailet><whatever>value1,value2</whatever></mailet>".getBytes()));
+    public void testParamWithComma() throws Exception {
+        fileHandler.load(new ByteArrayInputStream("<mailet><whatever>value1,value2</whatever></mailet>".getBytes()));
 
-        config.setConfiguration(builder);
+        config.setConfiguration(xmlConfiguration);
 
         String param = config.getInitParameterNames().next();
         assertThat(param).isEqualTo("whatever");
@@ -76,12 +87,11 @@ public class MailetConfigImplTest {
     }
 
     @Test
-    public void testParamWithXmlSpace() throws ConfigurationException {
-        builder.setDelimiterParsingDisabled(true);
-        builder.load(new ByteArrayInputStream(
+    public void testParamWithXmlSpace() throws Exception {
+        fileHandler.load(new ByteArrayInputStream(
                 "<mailet><whatever xml:space=\"preserve\"> some text </whatever></mailet>".getBytes()));
 
-        config.setConfiguration(builder);
+        config.setConfiguration(xmlConfiguration);
 
         String param = config.getInitParameterNames().next();
         assertThat(param).isEqualTo("whatever");
diff --git a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessorTest.java b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessorTest.java
index 8b585fd..d4daaa4 100644
--- a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessorTest.java
+++ b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessorTest.java
@@ -22,17 +22,18 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Fail.fail;
 
 import java.io.ByteArrayInputStream;
+import java.io.IOException;
 import java.util.Arrays;
 import java.util.List;
 
 import javax.mail.MessagingException;
 
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
-import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.configuration2.HierarchicalConfiguration;
+import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.mailetcontainer.api.MailProcessor;
 import org.apache.james.mailetcontainer.api.mock.MockMailProcessor;
 import org.apache.james.server.core.MailImpl;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.apache.mailet.Mail;
 import org.junit.Rule;
 import org.junit.Test;
@@ -54,7 +55,7 @@ public abstract class AbstractStateCompositeProcessorTest {
 
                     @Override
                     public void service(Mail mail) throws MessagingException {
-                        // check if the right processor was selected depending on the state
+                        // check if the right processor wasAbstractStateMailetProcessorTest selected depending on the state
                         assertThat(mail.getState()).isEqualTo(state);
                         super.service(mail);
                     }
@@ -132,20 +133,18 @@ public abstract class AbstractStateCompositeProcessorTest {
     }
     }
 
-    private HierarchicalConfiguration createConfig(List<String> states) throws ConfigurationException {
+    private HierarchicalConfiguration createConfig(List<String> states) throws ConfigurationException, IOException {
 
-    StringBuilder sb = new StringBuilder();
-    sb.append("<?xml version=\"1.0\"?>");
-    sb.append("<processors>");
-        for (String state : states) {
-            sb.append("<processor state=\"");
-            sb.append(state);
-            sb.append("\"/>");
-        }
-    sb.append("</processors>");
+        StringBuilder sb = new StringBuilder();
+        sb.append("<?xml version=\"1.0\"?>");
+        sb.append("<processors>");
+            for (String state : states) {
+                sb.append("<processor state=\"");
+                sb.append(state);
+                sb.append("\"/>");
+            }
+        sb.append("</processors>");
 
-    DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
-    builder.load(new ByteArrayInputStream(sb.toString().getBytes()));
-    return builder;
+        return FileConfigurationProvider.getConfig(new ByteArrayInputStream(sb.toString().getBytes()));
     }
 }
diff --git a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessorTest.java b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessorTest.java
index eaaab6c..b68a6b1 100644
--- a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessorTest.java
+++ b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessorTest.java
@@ -27,9 +27,8 @@ import java.util.concurrent.CountDownLatch;
 import javax.mail.MessagingException;
 import javax.mail.internet.AddressException;
 
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
-import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.configuration2.HierarchicalConfiguration;
+import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.core.MailAddress;
 import org.apache.james.mailetcontainer.api.mock.ExceptionThrowingMailet;
 import org.apache.james.mailetcontainer.api.mock.ExceptionThrowingMatcher;
@@ -37,6 +36,7 @@ import org.apache.james.mailetcontainer.api.mock.MockMailet;
 import org.apache.james.mailetcontainer.api.mock.MockMatcher;
 import org.apache.james.mailetcontainer.lib.AbstractStateMailetProcessor.MailetProcessorListener;
 import org.apache.james.server.core.MailImpl;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.apache.mailet.Mail;
 import org.apache.mailet.Mailet;
 import org.apache.mailet.Matcher;
@@ -59,9 +59,7 @@ public abstract class AbstractStateMailetProcessorTest {
 
         sb.append("</processor>");
 
-        DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
-        builder.load(new ByteArrayInputStream(sb.toString().getBytes()));
-        return builder;
+        return FileConfigurationProvider.getConfig(new ByteArrayInputStream(sb.toString().getBytes()));
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org