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 2012/09/07 20:19:17 UTC
svn commit: r1382109 - in /commons/proper/digester/trunk:
core/src/main/java/org/apache/commons/digester3/xmlrules/
core/src/test/java/org/apache/commons/digester3/xmlrules/
core/src/test/resources/org/apache/commons/digester3/xmlrules/ src/changes/
Author: simonetripodi
Date: Fri Sep 7 18:19:16 2012
New Revision: 1382109
URL: http://svn.apache.org/viewvc?rev=1382109&view=rev
Log:
[DIGESTER-167] Groundless 'Circular file inclusion detected' exception when including rules XML file - patch submitted by Eugene Fedotov
Modified:
commons/proper/digester/trunk/core/src/main/java/org/apache/commons/digester3/xmlrules/IncludeRule.java
commons/proper/digester/trunk/core/src/test/java/org/apache/commons/digester3/xmlrules/IncludeTest.java
commons/proper/digester/trunk/core/src/test/resources/org/apache/commons/digester3/xmlrules/testCircularRules.xml
commons/proper/digester/trunk/core/src/test/resources/org/apache/commons/digester3/xmlrules/testrulesinclude.xml
commons/proper/digester/trunk/src/changes/changes.xml
Modified: commons/proper/digester/trunk/core/src/main/java/org/apache/commons/digester3/xmlrules/IncludeRule.java
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/core/src/main/java/org/apache/commons/digester3/xmlrules/IncludeRule.java?rev=1382109&r1=1382108&r2=1382109&view=diff
==============================================================================
--- commons/proper/digester/trunk/core/src/main/java/org/apache/commons/digester3/xmlrules/IncludeRule.java (original)
+++ commons/proper/digester/trunk/core/src/main/java/org/apache/commons/digester3/xmlrules/IncludeRule.java Fri Sep 7 18:19:16 2012
@@ -21,6 +21,7 @@ package org.apache.commons.digester3.xml
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.Set;
import org.apache.commons.digester3.Rule;
import org.apache.commons.digester3.binder.RulesBinder;
@@ -92,18 +93,27 @@ final class IncludeRule
}
}
- if ( memoryRulesBinder.getIncludedFiles().add( xmlRulesResource.toString() ) )
+ Set<String> includedFiles = memoryRulesBinder.getIncludedFiles();
+ String xmlRulesResourceString = xmlRulesResource.toString();
+ if ( includedFiles.add( xmlRulesResourceString ) )
{
- install( new FromXmlRulesModule()
+ try
{
-
- @Override
- protected void loadRules()
+ install( new FromXmlRulesModule()
{
- loadXMLRules( xmlRulesResource );
- }
- } );
+ @Override
+ protected void loadRules()
+ {
+ loadXMLRules( xmlRulesResource );
+ }
+
+ } );
+ }
+ finally
+ {
+ includedFiles.remove( xmlRulesResourceString );
+ }
}
else
{
Modified: commons/proper/digester/trunk/core/src/test/java/org/apache/commons/digester3/xmlrules/IncludeTest.java
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/core/src/test/java/org/apache/commons/digester3/xmlrules/IncludeTest.java?rev=1382109&r1=1382108&r2=1382109&view=diff
==============================================================================
--- commons/proper/digester/trunk/core/src/test/java/org/apache/commons/digester3/xmlrules/IncludeTest.java (original)
+++ commons/proper/digester/trunk/core/src/test/java/org/apache/commons/digester3/xmlrules/IncludeTest.java Fri Sep 7 18:19:16 2012
@@ -19,7 +19,6 @@
package org.apache.commons.digester3.xmlrules;
import static org.apache.commons.digester3.binder.DigesterLoader.newLoader;
-
import static org.junit.Assert.assertEquals;
import java.io.StringReader;
@@ -52,7 +51,7 @@ public class IncludeTest
public void body( String namespace, String name, String text )
throws Exception
{
- ArrayList<String> stringList = getDigester().peek();
+ List<String> stringList = getDigester().peek();
stringList.add( text );
}
@@ -66,6 +65,8 @@ public class IncludeTest
throws Exception
{
final String rulesXml = "<?xml version='1.0'?>"
+ + "<!DOCTYPE digester-rules PUBLIC \"-//Apache Commons //DTD digester-rules XML V1.0//EN\" "
+ + "\"http://commons.apache.org/digester/dtds/digester-rules-3.0.dtd\">"
+ "<digester-rules>"
+ " <pattern value='root/foo'>"
+ " <include class='org.apache.commons.digester3.xmlrules.IncludeTest$TestDigesterRulesModule' />"
@@ -84,7 +85,7 @@ public class IncludeTest
loadXMLRulesFromText( rulesXml );
}
- }).newDigester();
+ } ).newDigester();
digester.push( list );
digester.parse( new StringReader( xml ) );
@@ -92,6 +93,40 @@ public class IncludeTest
assertEquals( "Entry value", "short", list.get( 0 ) );
}
+ @Test
+ public void testUrlInclude()
+ throws Exception
+ {
+ final String rulesXml = "<?xml version='1.0'?>"
+ + "<!DOCTYPE digester-rules PUBLIC \"-//Apache Commons //DTD digester-rules XML V1.0//EN\" "
+ + "\"http://commons.apache.org/digester/dtds/digester-rules-3.0.dtd\">"
+ + "<digester-rules>"
+ + " <pattern value='root/foo1'>"
+ + " <include url='classpath:org/apache/commons/digester3/xmlrules/testrulesinclude.xml' />"
+ + " </pattern>"
+ + " <pattern value='root/foo2'>"
+ + " <include url='classpath:org/apache/commons/digester3/xmlrules/testrulesinclude.xml' />"
+ + " </pattern>"
+ + "</digester-rules>";
+
+ String xml = "<?xml version='1.0' ?><root><foo1><bar><foo value='foo1'/></bar></foo1><foo2><bar><foo value='foo2'/></bar></foo2></root>";
+
+ List<String> list = new ArrayList<String>();
+ Digester digester = newLoader( new FromXmlRulesModule()
+ {
+
+ @Override
+ protected void loadRules()
+ {
+ loadXMLRulesFromText( rulesXml );
+ }
+
+ }).newDigester();
+ digester.push( list );
+ digester.parse( new StringReader( xml ) );
+ assertEquals( "[foo1, foo2]", list.toString() );
+ }
+
/**
* Validates that circular includes are detected and result in an exception
*/
Modified: commons/proper/digester/trunk/core/src/test/resources/org/apache/commons/digester3/xmlrules/testCircularRules.xml
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/core/src/test/resources/org/apache/commons/digester3/xmlrules/testCircularRules.xml?rev=1382109&r1=1382108&r2=1382109&view=diff
==============================================================================
--- commons/proper/digester/trunk/core/src/test/resources/org/apache/commons/digester3/xmlrules/testCircularRules.xml (original)
+++ commons/proper/digester/trunk/core/src/test/resources/org/apache/commons/digester3/xmlrules/testCircularRules.xml Fri Sep 7 18:19:16 2012
@@ -19,7 +19,7 @@
<!-- Rules to test the DigesterLoader's circular include detection.
Attempting to create a digester with these rules should result
in an exception. -->
-
+<!DOCTYPE digester-rules PUBLIC "-//Apache Commons //DTD digester-rules XML V1.0//EN" "http://commons.apache.org/digester/dtds/digester-rules-3.0.dtd">
<digester-rules>
<pattern value="root/foo">
<object-create-rule classname="org.apache.commons.digester3.xmlrules.ObjectTestImpl" />
Modified: commons/proper/digester/trunk/core/src/test/resources/org/apache/commons/digester3/xmlrules/testrulesinclude.xml
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/core/src/test/resources/org/apache/commons/digester3/xmlrules/testrulesinclude.xml?rev=1382109&r1=1382108&r2=1382109&view=diff
==============================================================================
--- commons/proper/digester/trunk/core/src/test/resources/org/apache/commons/digester3/xmlrules/testrulesinclude.xml (original)
+++ commons/proper/digester/trunk/core/src/test/resources/org/apache/commons/digester3/xmlrules/testrulesinclude.xml Fri Sep 7 18:19:16 2012
@@ -15,6 +15,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<!DOCTYPE digester-rules PUBLIC "-//Apache Commons //DTD digester-rules XML V1.0//EN" "http://commons.apache.org/digester/dtds/digester-rules-3.0.dtd">
<digester-rules>
<pattern value="bar">
<pattern value="foo">
Modified: commons/proper/digester/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/src/changes/changes.xml?rev=1382109&r1=1382108&r2=1382109&view=diff
==============================================================================
--- commons/proper/digester/trunk/src/changes/changes.xml (original)
+++ commons/proper/digester/trunk/src/changes/changes.xml Fri Sep 7 18:19:16 2012
@@ -26,6 +26,9 @@
<action dev="simonetripodi" type="fix" issue="DIGESTER-169" due-to="Eugene Fedotov">
Problem when including rules XML file with "classpath:" URL prefix
</action>
+ <action dev="simonetripodi" type="fix" issue="DIGESTER-167" due-to="Eugene Fedotov">
+ Groundless "Circular file inclusion detected" exception when including rules XML file
+ </action>
<action dev="simonetripodi" type="fix" issue="DIGESTER-165" due-to="Dirk Schaube">
BinderClassLoader does not override getResource
</action>