You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2011/11/05 11:24:42 UTC

svn commit: r1197917 - in /commons/proper/digester/trunk: RELEASE-NOTES.txt src/changes/changes.xml src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java

Author: simonetripodi
Date: Sat Nov  5 10:24:42 2011
New Revision: 1197917

URL: http://svn.apache.org/viewvc?rev=1197917&view=rev
Log:
[DIGESTER-155] ClassLoader reference set to DigesterLoader not set in produced Digetser instances

Modified:
    commons/proper/digester/trunk/RELEASE-NOTES.txt
    commons/proper/digester/trunk/src/changes/changes.xml
    commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
    commons/proper/digester/trunk/src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java

Modified: commons/proper/digester/trunk/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/RELEASE-NOTES.txt?rev=1197917&r1=1197916&r2=1197917&view=diff
==============================================================================
--- commons/proper/digester/trunk/RELEASE-NOTES.txt (original)
+++ commons/proper/digester/trunk/RELEASE-NOTES.txt Sat Nov  5 10:24:42 2011
@@ -55,7 +55,7 @@ NEW FEATURES
 BUGS FROM PREVIOUS RELEASE
 ===========================
 
- * NONE
+ * [DIGESTER-155] ClassLoader reference set to DigesterLoader not set in produced Digetser instances
 
 IMPROVEMENTS OVER PREVIOUS RELEASE
 ===================================

Modified: commons/proper/digester/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/src/changes/changes.xml?rev=1197917&r1=1197916&r2=1197917&view=diff
==============================================================================
--- commons/proper/digester/trunk/src/changes/changes.xml (original)
+++ commons/proper/digester/trunk/src/changes/changes.xml Sat Nov  5 10:24:42 2011
@@ -23,6 +23,9 @@
   </properties>
   <body>
   <release version="3.2" date="201?-??-??" description="Maintenance release.">
+    <action dev="simonetripodi" type="fix" issue="DIGESTER-155">
+      ClassLoader reference set to DigesterLoader not set in produced Digetser instances
+    </action>
     <action dev="simonetripodi" type="add" issue="DIGESTER-153">
       Add Constructor support to ObjectCreateRule
     </action>

Modified: commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java?rev=1197917&r1=1197916&r2=1197917&view=diff
==============================================================================
--- commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java (original)
+++ commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java Sat Nov  5 10:24:42 2011
@@ -107,8 +107,6 @@ public final class DigesterLoader
 
     private final Iterable<RulesModule> rulesModules;
 
-    private boolean useContextClassLoader = true;
-
     /**
      * The class loader to use for instantiating application objects.
      * If not specified, the context class loader, or the class loader
@@ -159,6 +157,7 @@ public final class DigesterLoader
     private DigesterLoader( Iterable<RulesModule> rulesModules )
     {
         this.rulesModules = rulesModules;
+        setUseContextClassLoader( true );
     }
 
     /**
@@ -173,7 +172,14 @@ public final class DigesterLoader
      */
     public DigesterLoader setUseContextClassLoader( boolean useContextClassLoader )
     {
-        this.useContextClassLoader = useContextClassLoader;
+        if ( useContextClassLoader )
+        {
+            setClassLoader( Thread.currentThread().getContextClassLoader() );
+        }
+        else
+        {
+            setClassLoader( getClass().getClassLoader() );
+        }
         return this;
     }
 
@@ -185,6 +191,11 @@ public final class DigesterLoader
      */
     public DigesterLoader setClassLoader( ClassLoader classLoader )
     {
+        if ( classLoader == null )
+        {
+            throw new IllegalArgumentException( "Parameter 'classLoader' cannot be null" );
+        }
+
         this.classLoader = classLoader;
         return this;
     }
@@ -539,6 +550,7 @@ public final class DigesterLoader
         }
 
         Digester digester = new Digester( reader );
+        digester.setClassLoader( classLoader );
         digester.setRules( rules );
         digester.setSubstitutor( substitutor );
         digester.registerAll( entityValidator );
@@ -572,14 +584,9 @@ public final class DigesterLoader
      */
     public RuleSet createRuleSet()
     {
-        ClassLoader contextClassLoader =
-            classLoader != null ? classLoader
-                            : ( useContextClassLoader ? Thread.currentThread().getContextClassLoader()
-                                            : getClass().getClassLoader() );
-
-        if ( !contextClassLoader.equals( rulesBinder.getContextClassLoader() ) )
+        if ( !classLoader.equals( rulesBinder.getContextClassLoader() ) )
         {
-            rulesBinder.initialize( contextClassLoader );
+            rulesBinder.initialize( classLoader );
             for ( RulesModule rulesModule : rulesModules )
             {
                 rulesModule.configure( rulesBinder );

Modified: commons/proper/digester/trunk/src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java?rev=1197917&r1=1197916&r2=1197917&view=diff
==============================================================================
--- commons/proper/digester/trunk/src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java (original)
+++ commons/proper/digester/trunk/src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java Sat Nov  5 10:24:42 2011
@@ -124,4 +124,25 @@ public final class DigesterLoaderTestCas
         assertSame( expected, actual );
     }
 
+    @Test
+    public void digester155()
+    {
+        ClassLoader expected = getClass().getClassLoader();
+
+        Digester digester = newLoader( new AbstractRulesModule()
+        {
+
+            @Override
+            protected void configure()
+            {
+                // do nothing
+            }
+
+        } ).setClassLoader( expected ).newDigester();
+
+        ClassLoader actual = digester.getClassLoader();
+
+        assertSame( expected, actual );
+    }
+
 }