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/05/25 10:25:39 UTC
svn commit: r1127425 - in
/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules:
FromXmlRulesModule.java metaparser/IncludeRule.java
metaparser/XmlRulesModule.java
Author: simonetripodi
Date: Wed May 25 08:25:39 2011
New Revision: 1127425
URL: http://svn.apache.org/viewvc?rev=1127425&view=rev
Log:
allowed users load more than one XML configuration file inside the same module
Modified:
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/FromXmlRulesModule.java
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/IncludeRule.java
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/XmlRulesModule.java
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/FromXmlRulesModule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/FromXmlRulesModule.java?rev=1127425&r1=1127424&r2=1127425&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/FromXmlRulesModule.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/FromXmlRulesModule.java Wed May 25 08:25:39 2011
@@ -17,6 +17,7 @@
*/
package org.apache.commons.digester3.xmlrules;
+import static java.util.Collections.unmodifiableSet;
import static org.apache.commons.digester3.binder.DigesterLoader.newLoader;
import java.io.File;
@@ -26,7 +27,12 @@ import java.io.StringReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.apache.commons.digester3.Digester;
import org.apache.commons.digester3.binder.AbstractRulesModule;
import org.apache.commons.digester3.binder.RulesModule;
import org.apache.commons.digester3.xmlrules.metaparser.XmlRulesModule;
@@ -48,7 +54,9 @@ public abstract class FromXmlRulesModule
private final URL xmlRulesDtdUrl = this.getClass().getResource(DIGESTER_DTD_PATH);
- private InputSource inputSource;
+ private final List<InputSource> inputSource = new ArrayList<InputSource>();
+
+ private final Set<String> systemIds = new HashSet<String>();
private String rootPath;
@@ -58,7 +66,7 @@ public abstract class FromXmlRulesModule
@Override
protected void configure()
{
- if ( inputSource != null )
+ if ( !inputSource.isEmpty() )
{
throw new IllegalStateException( "Re-entry is not allowed." );
}
@@ -67,24 +75,27 @@ public abstract class FromXmlRulesModule
{
loadRules();
- XmlRulesModule xmlRulesModule = new XmlRulesModule( rulesBinder(), getSystemId(), rootPath );
-
- try
- {
- newLoader( xmlRulesModule )
+ XmlRulesModule xmlRulesModule = new XmlRulesModule( rulesBinder(), getSystemIds(), rootPath );
+ Digester digester = newLoader( xmlRulesModule )
.register( DIGESTER_PUBLIC_ID, xmlRulesDtdUrl.toString() )
.setXIncludeAware( true )
- .newDigester()
- .parse( inputSource );
- }
- catch ( Exception e )
+ .newDigester();
+
+ for ( InputSource source : inputSource )
{
- addError( "Impossible to load XML defined in the URL '%s': %s", getSystemId(), e.getMessage() );
+ try
+ {
+ digester.parse( source );
+ }
+ catch ( Exception e )
+ {
+ addError( "Impossible to load XML defined in the InputSource '%s': %s", inputSource, e.getMessage() );
+ }
}
}
finally
{
- inputSource = null;
+ inputSource.clear();
}
}
@@ -105,7 +116,16 @@ public abstract class FromXmlRulesModule
throw new IllegalArgumentException( "Argument 'inputSource' must be not null" );
}
- this.inputSource = inputSource;
+ this.inputSource.add( inputSource );
+
+ String systemId = inputSource.getSystemId();
+ if ( systemId != null )
+ {
+ if ( !systemIds.add( systemId ) )
+ {
+ addError( "XML rules file '%s' already bound", systemId );
+ }
+ }
}
/**
@@ -235,18 +255,13 @@ public abstract class FromXmlRulesModule
}
/**
- * Returns the XML source SystemId load by this module.
+ * Returns the XML source SystemIds load by this module.
*
- * @return The XML source SystemId load by this module
+ * @return The XML source SystemIds load by this module
*/
- public final String getSystemId()
+ public final Set<String> getSystemIds()
{
- if ( inputSource == null )
- {
- return null;
- }
-
- return inputSource.getSystemId();
+ return unmodifiableSet( systemIds );
}
}
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/IncludeRule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/IncludeRule.java?rev=1127425&r1=1127424&r2=1127425&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/IncludeRule.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/IncludeRule.java Wed May 25 08:25:39 2011
@@ -112,12 +112,17 @@ final class IncludeRule
if ( fromXmlRulesModule != null )
{
- if ( !memoryRulesBinder.getIncludedFiles().add( fromXmlRulesModule.getSystemId() ) )
+ boolean circularFileInclusionDetected = false;
+ for ( String systemId : fromXmlRulesModule.getSystemIds() )
{
- targetRulesBinder.addError( "Circular file inclusion detected for XML rules: %s",
- fromXmlRulesModule.getSystemId() );
+ if ( !memoryRulesBinder.getIncludedFiles().add( systemId ) )
+ {
+ targetRulesBinder.addError( "Circular file inclusion detected for XML rules: %s", systemId );
+ circularFileInclusionDetected = true;
+ }
}
- else
+
+ if ( !circularFileInclusionDetected )
{
install( fromXmlRulesModule );
}
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/XmlRulesModule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/XmlRulesModule.java?rev=1127425&r1=1127424&r2=1127425&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/XmlRulesModule.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/XmlRulesModule.java Wed May 25 08:25:39 2011
@@ -17,6 +17,8 @@
*/
package org.apache.commons.digester3.xmlrules.metaparser;
+import java.util.Set;
+
import org.apache.commons.digester3.binder.LinkedRuleBuilder;
import org.apache.commons.digester3.binder.RulesBinder;
import org.apache.commons.digester3.binder.RulesModule;
@@ -30,17 +32,17 @@ public final class XmlRulesModule
private final RulesBinder targetRulesBinder;
- private final String rootSystemId;
+ private final Set<String> rootSystemIds;
private final String rootPath;
private WithMemoryRulesBinder memoryRulesBinder;
- public XmlRulesModule( final RulesBinder targetRulesBinder, String rootSystemId,
+ public XmlRulesModule( final RulesBinder targetRulesBinder, Set<String> rootSystemIds,
/* @Nullable */String rootPath )
{
this.targetRulesBinder = targetRulesBinder;
- this.rootSystemId = rootSystemId;
+ this.rootSystemIds = rootSystemIds;
this.rootPath = rootPath;
}
@@ -56,9 +58,9 @@ public final class XmlRulesModule
else
{
memoryRulesBinder = new WithMemoryRulesBinder( rulesBinder );
- if ( rootSystemId != null )
+ if ( !rootSystemIds.isEmpty() )
{
- memoryRulesBinder.getIncludedFiles().add( rootSystemId );
+ memoryRulesBinder.getIncludedFiles().addAll( rootSystemIds );
}
}