This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git
The following commit(s) were added to refs/heads/master by this push:
new f977099330 FELIX-6812: Fix ConfigInstaller to use listConfigurations
instead of getConfiguration (#458)
f977099330 is described below
commit f9770993305075559c31cf8e28a2784e3122f979
Author: Felix Marx <[email protected]>
AuthorDate: Thu Mar 12 15:53:46 2026 +0100
FELIX-6812: Fix ConfigInstaller to use listConfigurations instead of
getConfiguration (#458)
Replace getConfiguration() calls with listConfigurations() in
ConfigInstaller.configurationEvent() method to avoid unintentionally
creating new configurations. The getConfiguration() method creates a
configuration if it doesn't exist, which is not the desired behavior
when simply checking for existing configurations.
Changes:
- Use listConfigurations("(service.pid=" + pid + ")") instead of
getConfiguration(pid, "?")
- Add proper null and length checks for configuration arrays
- Update corresponding test mocks to reflect the corrected API usage
This prevents unwanted configuration creation during configuration
event handling.
---
.../felix/fileinstall/internal/ConfigInstaller.java | 12 +++++++++---
.../felix/fileinstall/internal/ConfigInstallerTest.java | 15 +++++++++------
2 files changed, 18 insertions(+), 9 deletions(-)
diff --git
a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
index cf0a4b539f..020ee0bb52 100644
---
a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
+++
b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
@@ -237,9 +237,15 @@ public class ConfigInstaller implements ArtifactInstaller,
ConfigurationListener
{
try
{
- Configuration config =
getConfigurationAdmin().getConfiguration(
- configurationEvent.getPid(),
- "?");
+ Configuration[] configurations =
getConfigurationAdmin().listConfigurations("(service.pid=" +
configurationEvent.getPid() + ")");
+ if (null == configurations) {
+ return;
+ }
+ if (configurations.length < 1) {
+ return;
+ }
+ Configuration config = configurations[0];
+
Dictionary<?,?> dict = config.getProperties();
String fileName = dict != null ? (String) dict.get(
DirectoryWatcher.FILENAME ) : null;
File file = fileName != null ? fromConfigKey(fileName) : null;
diff --git
a/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java
b/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java
index 35ef49f2b3..f423379041 100644
---
a/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java
+++
b/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java
@@ -245,10 +245,10 @@ public class ConfigInstallerTest extends TestCase {
EasyMock.expect(mockBundleContext.getProperty((String)
EasyMock.anyObject()))
.andReturn(null)
.anyTimes();
- EasyMock.expect(mockConfigurationAdmin.listConfigurations((String)
EasyMock.anyObject()))
+
EasyMock.expect(mockConfigurationAdmin.listConfigurations("(felix.fileinstall.filename=file:"
+ file + ")"))
.andReturn(null);
- EasyMock.expect(mockConfigurationAdmin.getConfiguration(pid, "?"))
- .andReturn(mockConfiguration);
+
EasyMock.expect(mockConfigurationAdmin.listConfigurations("(service.pid=" + pid
+ ")"))
+ .andReturn(new Configuration[] { mockConfiguration });
ServiceReference<ConfigurationAdmin> sr =
EasyMock.createMock(ServiceReference.class);
EasyMock.expect(mockConfiguration.updateIfDifferent(EasyMock.capture(props))).andReturn(true);
@@ -327,8 +327,8 @@ public class ConfigInstallerTest extends TestCase {
EasyMock.expect(mockBundleContext.getProperty((String)
EasyMock.anyObject()))
.andReturn(null)
.anyTimes();
- EasyMock.expect(mockConfigurationAdmin.listConfigurations((String)
EasyMock.anyObject()))
- .andReturn(null);
+
EasyMock.expect(mockConfigurationAdmin.listConfigurations("(service.pid=" + pid
+ ")"))
+ .andReturn(new Configuration[] { mockConfiguration });
EasyMock.expect(mockConfigurationAdmin.getConfiguration(pid, "?"))
.andReturn(mockConfiguration);
EasyMock.expect(mockConfiguration.getPid())
@@ -386,6 +386,9 @@ public class ConfigInstallerTest extends TestCase {
.andReturn(cachingPersistenceConfiguration)
.anyTimes();
+
EasyMock.expect(mockConfigurationAdmin.listConfigurations("(service.pid=" + pid
+ ")"))
+ .andReturn(new Configuration[] {
cachingPersistenceConfiguration });
+
EasyMock.expect(mockConfigurationAdmin.getConfiguration(pid, null))
.andReturn(cachingPersistenceConfiguration)
.anyTimes();
@@ -393,7 +396,7 @@ public class ConfigInstallerTest extends TestCase {
final Configuration newConfiguration =
EasyMock.createMock(Configuration.class);
EasyMock.expect(newConfiguration.getAttributes()).andReturn(Collections.emptySet()).times(2);
- EasyMock.expect(mockConfigurationAdmin.listConfigurations((String)
EasyMock.anyObject()))
+
EasyMock.expect(mockConfigurationAdmin.listConfigurations("(felix.fileinstall.filename=file:"
+ file + ")"))
.andReturn(new Configuration[] { newConfiguration });
EasyMock.expect(newConfiguration.getProperties())