diff --git a/core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java b/core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java index 41e24b1b3..d27327663 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java @@ -90,7 +90,7 @@ public class ConfigurationManager { *

* *

- * TODO: The lazy instantiation of XmlConfigurationProvider should be refactored to be elsewhere. The behavior described above seems unintuitive. + * TODO: The lazy instantiation of StrutsDefaultConfigurationProvider should be refactored to be elsewhere. The behavior described above seems unintuitive. *

* * @return the list of registered ConfigurationProvider objects @@ -137,6 +137,13 @@ public class ConfigurationManager { } } + public void removeContainerProvider(ContainerProvider provider) { + if (containerProviders.remove(provider)) { + clearContainerProvider(provider); + providersChanged = true; + } + } + public void clearContainerProviders() { for (ContainerProvider containerProvider : containerProviders) { clearContainerProvider(containerProvider); diff --git a/core/src/test/java/com/opensymphony/xwork2/config/ConfigurationManagerTest.java b/core/src/test/java/com/opensymphony/xwork2/config/ConfigurationManagerTest.java index bb54ad565..a37ac6b34 100644 --- a/core/src/test/java/com/opensymphony/xwork2/config/ConfigurationManagerTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/config/ConfigurationManagerTest.java @@ -30,6 +30,9 @@ import com.opensymphony.xwork2.util.location.LocatableProperties; import java.util.Properties; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + /** * ConfigurationManagerTest @@ -147,6 +150,19 @@ public class ConfigurationManagerTest extends XWorkTestCase { assertTrue(state.isDestroyed2); } + public void testRemoveConfigurationProvider() throws Exception { + ConfigurationProvider configProvider1 = mock(ConfigurationProvider.class); + ConfigurationProvider configProvider2 = mock(ConfigurationProvider.class); + configurationManager.addContainerProvider(configProvider1); + configurationManager.addContainerProvider(configProvider2); + + configurationManager.removeContainerProvider(configProvider1); + + verify(configProvider1).destroy(); + assertFalse(configurationManager.getContainerProviders().contains(configProvider1)); + assertTrue(configurationManager.getContainerProviders().contains(configProvider2)); + } + public void testClearConfigurationProviders() throws Exception { configProviderMock.expect("destroy"); configurationManager.clearContainerProviders();