commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ohe...@apache.org
Subject svn commit: r558368 - in /jakarta/commons/proper/configuration/trunk: src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java src/test/org/apache/commons/configuration/TestDefaultConfigurationBuilder.java xdocs/changes.xml
Date Sat, 21 Jul 2007 19:00:52 GMT
Author: oheger
Date: Sat Jul 21 12:00:51 2007
New Revision: 558368

URL: http://svn.apache.org/viewvc?view=rev&rev=558368
Log:
CONFIGURATION-285: DefaultConfigurationBuilder now fires an error event when an optional configuration
source could not be loaded.

Modified:
    jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java
    jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDefaultConfigurationBuilder.java
    jakarta/commons/proper/configuration/trunk/xdocs/changes.xml

Modified: jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java?view=diff&rev=558368&r1=558367&r2=558368
==============================================================================
--- jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java
(original)
+++ jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java
Sat Jul 21 12:00:51 2007
@@ -30,10 +30,12 @@
 import org.apache.commons.configuration.beanutils.BeanHelper;
 import org.apache.commons.configuration.beanutils.DefaultBeanFactory;
 import org.apache.commons.configuration.beanutils.XMLBeanDeclaration;
+import org.apache.commons.configuration.event.ConfigurationErrorListener;
 import org.apache.commons.configuration.tree.ConfigurationNode;
 import org.apache.commons.configuration.tree.DefaultExpressionEngine;
 import org.apache.commons.configuration.tree.OverrideCombiner;
 import org.apache.commons.configuration.tree.UnionCombiner;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * <p>
@@ -120,7 +122,11 @@
  * <tr>
  * <td valign="top"><code>config-optional</code></td>
  * <td>Declares a configuration as optional. This means that errors that occur
- * when creating the configuration are silently ignored.</td>
+ * when creating the configuration are ignored. (However
+ * <code>{@link ConfigurationErrorListener}</code>s registered at the builder
+ * instance will get notified about this error: they receive an event of type
+ * <code>EVENT_ERR_LOAD_OPTIONAL</code>. The key property of this event contains
+ * the name of the optional configuration source that caused this problem.)</td>
  * </tr>
  * </table>
  * </p>
@@ -178,6 +184,12 @@
             .getName()
             + "/ADDITIONAL_CONFIG";
 
+    /**
+     * Constant for the type of error events caused by optional configurations
+     * that cannot be loaded.
+     */
+    public static final int EVENT_ERR_LOAD_OPTIONAL = 51;
+
     /** Constant for the name of the configuration bean factory. */
     static final String CONFIG_BEAN_FACTORY_NAME = DefaultConfigurationBuilder.class
             .getName()
@@ -329,6 +341,8 @@
         super();
         providers = new HashMap();
         registerDefaultProviders();
+        setLogger(LogFactory.getLog(getClass()));
+        addErrorLogListener();  // log errors per default
     }
 
     /**
@@ -1061,6 +1075,12 @@
                 }
                 else
                 {
+                    // Notify registered error listeners
+                    decl.getConfigurationBuilder().fireError(
+                            EVENT_ERR_LOAD_OPTIONAL,
+                            decl.getConfiguration().getString(ATTR_NAME), null,
+                            ex);
+
                     if (decl.isForceCreate())
                     {
                         try

Modified: jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDefaultConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDefaultConfigurationBuilder.java?view=diff&rev=558368&r1=558367&r2=558368
==============================================================================
--- jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDefaultConfigurationBuilder.java
(original)
+++ jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDefaultConfigurationBuilder.java
Sat Jul 21 12:00:51 2007
@@ -31,8 +31,7 @@
  * Test class for DefaultConfigurationBuilder.
  *
  * @author Oliver Heger
- * @version $Id: TestDefaultConfigurationBuilder.java 384601 2006-03-09
- * 20:22:58Z oheger $
+ * @version $Id$
  */
 public class TestDefaultConfigurationBuilder extends TestCase
 {
@@ -70,6 +69,7 @@
         System.setProperty("test_file_xml", "test.xml");
         System.setProperty("test_file_combine", "testcombine1.xml");
         factory = new DefaultConfigurationBuilder();
+        factory.clearErrorListeners();  // avoid exception messages
     }
 
     /**
@@ -401,6 +401,16 @@
     }
 
     /**
+     * Tests whether a default log error listener is registered at the builder
+     * instance.
+     */
+    public void testLogErrorListener()
+    {
+        assertEquals("No default error listener registered", 1,
+                new DefaultConfigurationBuilder().getErrorListeners().size());
+    }
+
+    /**
      * Tests loading a definition file that contains optional configurations.
      */
     public void testLoadOptional() throws Exception
@@ -409,6 +419,20 @@
         Configuration config = factory.getConfiguration();
         assertTrue(config.getBoolean("test.boolean"));
         assertEquals("value", config.getProperty("element"));
+    }
+
+    /**
+     * Tests whether loading a failing optional configuration causes an error
+     * event.
+     */
+    public void testLoadOptionalErrorEvent() throws Exception
+    {
+        factory.clearErrorListeners();
+        ConfigurationErrorListenerImpl listener = new ConfigurationErrorListenerImpl();
+        factory.addErrorListener(listener);
+        prepareOptionalTest("configuration", false);
+        listener.verify(DefaultConfigurationBuilder.EVENT_ERR_LOAD_OPTIONAL,
+                OPTIONAL_NAME, null);
     }
 
     /**

Modified: jakarta/commons/proper/configuration/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/xdocs/changes.xml?view=diff&rev=558368&r1=558367&r2=558368
==============================================================================
--- jakarta/commons/proper/configuration/trunk/xdocs/changes.xml (original)
+++ jakarta/commons/proper/configuration/trunk/xdocs/changes.xml Sat Jul 21 12:00:51 2007
@@ -23,6 +23,11 @@
 
   <body>
     <release version="1.5-SNAPSHOT" date="in SVN" description="">
+      <action dev="oheger" type="add" issue="CONFIGURATION-285">
+        DefaultConfigurationBuilder will now notify registered error listeners
+        about optional configuration sources that could not be created. Before
+        exceptions thrown by optional configurations were swallowed
+      </action>
       <action dev="oheger" type="fix" issue="CONFIGURATION-283">
         ConfigurationUtils.convertToHierarchical() now correctly deals with
         property values containing escaped list delimiters. This also affects



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


Mime
View raw message