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

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-configuration.git

commit ec0a9af49b6a15671f252946c824abc98bb39391
Author: Gary Gregory <[email protected]>
AuthorDate: Wed Apr 1 22:39:07 2026 -0400

    Add ConfigurationException.ConfigurationException(String, Object...)
---
 src/changes/changes.xml                                       |  3 ++-
 .../builder/combined/BaseConfigurationBuilderProvider.java    |  2 +-
 .../builder/combined/CombinedConfigurationBuilder.java        |  4 ++--
 .../commons/configuration2/ex/ConfigurationException.java     | 11 +++++++++++
 .../apache/commons/configuration2/io/DefaultFileSystem.java   |  2 +-
 .../org/apache/commons/configuration2/io/FileHandler.java     |  4 ++--
 .../apache/commons/configuration2/io/FileLocatorUtils.java    |  2 +-
 .../org/apache/commons/configuration2/io/VFSFileSystem.java   |  8 +++-----
 .../commons/configuration2/resolver/CatalogResolver.java      |  2 +-
 9 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b8f06c7dd..9e4eee234 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -23,10 +23,11 @@
     <author email="[email protected]">Apache Commons Community</author>
   </properties>
   <body>
-    <release version="2.13.1" date="YYYY-MM-DD" description="Minor release 
with new features and updated dependencies; requires Java 8 or above.">
+    <release version="2.14.0" date="YYYY-MM-DD" description="Minor release 
with new features and updated dependencies; requires Java 8 or above.">
       <!-- FIX -->
       <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix Apache RAT 
plugin console warnings.</action>
       <!-- ADD -->
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">Add 
ConfigurationException.ConfigurationException(String, Object...).</action>
       <!-- UPDATE -->
       <action type="update" dev="ggregory" due-to="Gary Gregory">Bump 
org.apache.commons:commons-parent from 92 to 97.</action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">Bump 
org.apache.commons:commons-text from 1.14.0 to 1.15.0.</action>
diff --git 
a/src/main/java/org/apache/commons/configuration2/builder/combined/BaseConfigurationBuilderProvider.java
 
b/src/main/java/org/apache/commons/configuration2/builder/combined/BaseConfigurationBuilderProvider.java
index e33046ae7..a143688c6 100644
--- 
a/src/main/java/org/apache/commons/configuration2/builder/combined/BaseConfigurationBuilderProvider.java
+++ 
b/src/main/java/org/apache/commons/configuration2/builder/combined/BaseConfigurationBuilderProvider.java
@@ -186,7 +186,7 @@ public class BaseConfigurationBuilderProvider implements 
ConfigurationBuilderPro
     protected String determineBuilderClass(final ConfigurationDeclaration 
decl) throws ConfigurationException {
         if (decl.isReload()) {
             if (getReloadingBuilderClass() == null) {
-                throw new ConfigurationException("No support for reloading for 
builder class " + getBuilderClass());
+                throw new ConfigurationException("No support for reloading for 
builder class %s", getBuilderClass());
             }
             return getReloadingBuilderClass();
         }
diff --git 
a/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java
 
b/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java
index 603b9249b..bd1b9b90a 100644
--- 
a/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java
+++ 
b/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java
@@ -335,7 +335,7 @@ public class CombinedConfigurationBuilder extends 
BasicConfigurationBuilder<Comb
         private ConfigurationBuilder<? extends Configuration> 
createConfigurationBuilder(final ConfigurationDeclaration decl) throws 
ConfigurationException {
             final ConfigurationBuilderProvider provider = 
providerForTag(decl.getConfiguration().getRootElementName());
             if (provider == null) {
-                throw new ConfigurationException("Unsupported configuration 
source: " + decl.getConfiguration().getRootElementName());
+                throw new ConfigurationException("Unsupported configuration 
source: %s", decl.getConfiguration().getRootElementName());
             }
 
             final ConfigurationBuilder<? extends Configuration> builder = 
provider.getConfigurationBuilder(decl);
@@ -910,7 +910,7 @@ public class CombinedConfigurationBuilder extends 
BasicConfigurationBuilder<Comb
         }
         final ConfigurationBuilder<? extends Configuration> builder = 
sourceData.getNamedBuilder(name);
         if (builder == null) {
-            throw new ConfigurationException("Builder cannot be resolved: " + 
name);
+            throw new ConfigurationException("Builder cannot be resolved: %s", 
name);
         }
         return builder;
     }
diff --git 
a/src/main/java/org/apache/commons/configuration2/ex/ConfigurationException.java
 
b/src/main/java/org/apache/commons/configuration2/ex/ConfigurationException.java
index d1658c859..b6fae7284 100644
--- 
a/src/main/java/org/apache/commons/configuration2/ex/ConfigurationException.java
+++ 
b/src/main/java/org/apache/commons/configuration2/ex/ConfigurationException.java
@@ -42,6 +42,17 @@ public class ConfigurationException extends Exception {
         super(message);
     }
 
+    /**
+     * Constructs a new {@code ConfigurationException} with specified detail 
message.
+     *
+     * @param format the error message for for {@link String#format(String, 
Object...)}.
+     * @param params the error parameters for for {@link String#format(String, 
Object...)}.
+     * @since 2.14.0
+     */
+    public ConfigurationException(final String format, Object... params) {
+        super(String.format(format, params));
+    }
+
     /**
      * Constructs a new {@code ConfigurationException} with specified detail 
message and nested {@code Throwable}.
      *
diff --git 
a/src/main/java/org/apache/commons/configuration2/io/DefaultFileSystem.java 
b/src/main/java/org/apache/commons/configuration2/io/DefaultFileSystem.java
index 358c2df25..bbfe4125b 100644
--- a/src/main/java/org/apache/commons/configuration2/io/DefaultFileSystem.java
+++ b/src/main/java/org/apache/commons/configuration2/io/DefaultFileSystem.java
@@ -110,7 +110,7 @@ public class DefaultFileSystem extends FileSystem {
         if (file != null && !file.exists()) {
             final File parent = file.getParentFile();
             if (parent != null && !parent.exists() && !parent.mkdirs()) {
-                throw new ConfigurationException("Cannot create path: " + 
parent);
+                throw new ConfigurationException("Cannot create path: %s", 
parent);
             }
         }
     }
diff --git 
a/src/main/java/org/apache/commons/configuration2/io/FileHandler.java 
b/src/main/java/org/apache/commons/configuration2/io/FileHandler.java
index ba0acc293..970a35abc 100644
--- a/src/main/java/org/apache/commons/configuration2/io/FileHandler.java
+++ b/src/main/java/org/apache/commons/configuration2/io/FileHandler.java
@@ -585,7 +585,7 @@ public class FileHandler {
         try {
             url = FileLocatorUtils.toURL(file);
         } catch (final MalformedURLException e1) {
-            throw new ConfigurationException("Cannot create URL from file " + 
file);
+            throw new ConfigurationException("Cannot create URL from file %s", 
file);
         }
 
         load(url);
@@ -964,7 +964,7 @@ public class FileHandler {
         }
 
         if (url == null) {
-            throw new ConfigurationException("Cannot locate configuration 
source " + fileName);
+            throw new ConfigurationException("Cannot locate configuration 
source %s", fileName);
         }
         save(url, locator);
     }
diff --git 
a/src/main/java/org/apache/commons/configuration2/io/FileLocatorUtils.java 
b/src/main/java/org/apache/commons/configuration2/io/FileLocatorUtils.java
index 6021dcf92..f2dcbae94 100644
--- a/src/main/java/org/apache/commons/configuration2/io/FileLocatorUtils.java
+++ b/src/main/java/org/apache/commons/configuration2/io/FileLocatorUtils.java
@@ -508,7 +508,7 @@ public final class FileLocatorUtils {
     public static URL locateOrThrow(final FileLocator locator) throws 
ConfigurationException {
         final URL url = locate(locator);
         if (url == null) {
-            throw new ConfigurationException("Could not locate: " + locator);
+            throw new ConfigurationException("Could not locate: %s", locator);
         }
         return url;
     }
diff --git 
a/src/main/java/org/apache/commons/configuration2/io/VFSFileSystem.java 
b/src/main/java/org/apache/commons/configuration2/io/VFSFileSystem.java
index d0a235a50..061e6b524 100644
--- a/src/main/java/org/apache/commons/configuration2/io/VFSFileSystem.java
+++ b/src/main/java/org/apache/commons/configuration2/io/VFSFileSystem.java
@@ -107,13 +107,11 @@ public class VFSFileSystem extends DefaultFileSystem {
             }
             final FileContent content = file.getContent();
             if (content == null) {
-                final String msg = "Cannot access content of " + 
file.getName().getFriendlyURI();
-                throw new ConfigurationException(msg);
+                throw new ConfigurationException("Cannot access content of 
%s", file.getName().getFriendlyURI());
             }
             return content.getInputStream();
         } catch (final FileSystemException fse) {
-            final String msg = "Unable to access " + url.toString();
-            throw new ConfigurationException(msg, fse);
+            throw new ConfigurationException("Unable to access " + 
url.toString(), fse);
         }
     }
 
@@ -172,7 +170,7 @@ public class VFSFileSystem extends DefaultFileSystem {
             final FileContent content = file.getContent();
 
             if (content == null) {
-                throw new ConfigurationException("Cannot access content of " + 
url);
+                throw new ConfigurationException("Cannot access content of 
%s", url);
             }
             return content.getOutputStream();
         } catch (final FileSystemException fse) {
diff --git 
a/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java 
b/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java
index 580cf6e57..241f4f4c5 100644
--- 
a/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java
+++ 
b/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java
@@ -420,7 +420,7 @@ public class CatalogResolver implements EntityResolver {
             try {
                 final URL url = locate(fs, null, resolved);
                 if (url == null) {
-                    throw new ConfigurationException("Could not locate " + 
resolved);
+                    throw new ConfigurationException("Could not locate %s", 
resolved);
                 }
                 final InputStream inputStream = fs.getInputStream(url);
                 final InputSource inputSource = new InputSource(resolved);

Reply via email to