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>[EMAIL PROTECTED] 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to