I found a bug in the digester.
It happens when you use the rules written in xml
instead of writing them in the code (see code below).
The bug happens when you use "<call-param-rule />" in
the xml file.
try
{
FileInputStream fis = new
FileInputStream(configFileName);
// the file "config-rules.xml" contains rules written
//in xml
URL url = getClass().getResource("config-rules.xml");
BatchContext config = (BatchContext)
DigesterLoader.load(url, getClass().getClassLoader(),
fis, this);
fis.close();
}
catch(DigesterLoadingException dle)
{
throw new BatchException(dle);
}
catch (SAXException ioe)
{
ioe.printStackTrace();
throw new BatchException(ioe);
}
catch (IOException ioe)
{
throw new BatchException(ioe);
}
___________________________________________________________
Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en fran�ais !
Yahoo! Mail : http://fr.mail.yahoo.com
public void addRuleInstances(Digester digester) {
final String ruleClassName = Rule.class.getName();
digester.register(DIGESTER_PUBLIC_ID, getDigesterRulesDTD());
digester.addRule("*/pattern", new PatternRule(digester, "value"));
digester.addRule("*/include", new IncludeRule(digester));
digester.addFactoryCreate("*/call-method-rule", new CallMethodRuleFactory());
digester.addRule("*/call-method-rule", new PatternRule(digester, "pattern"));
digester.addSetNext("*/call-method-rule", "add", ruleClassName);
/********************************************************************************/
//
// Modified by Philippe Mouawad
//
digester.addFactoryCreate("*/call-param-rule", new CallParamRuleFactory());
digester.addRule("*/call-param-rule", new PatternRule(digester, "pattern"));
digester.addSetNext("*/call-param-rule", "add", ruleClassName);
//
// End of modification
//
/********************************************************************************/
digester.addFactoryCreate("*/factory-create-rule", new
FactoryCreateRuleFactory());
digester.addRule("*/factory-create-rule", new PatternRule(digester,
"pattern"));
digester.addSetNext("*/factory-create-rule", "add", ruleClassName);
digester.addFactoryCreate("*/object-create-rule", new
ObjectCreateRuleFactory());
digester.addRule("*/object-create-rule", new PatternRule(digester, "pattern"));
digester.addSetNext("*/object-create-rule", "add", ruleClassName);
digester.addFactoryCreate("*/set-properties-rule", new
SetPropertiesRuleFactory());
digester.addRule("*/set-properties-rule", new PatternRule(digester,
"pattern"));
digester.addSetNext("*/set-properties-rule", "add", ruleClassName);
digester.addRule("*/set-properties-rule/alias", new
SetPropertiesAliasRule(digester));
digester.addFactoryCreate("*/set-property-rule", new SetPropertyRuleFactory());
digester.addRule("*/set-property-rule", new PatternRule(digester, "pattern"));
digester.addSetNext("*/set-property-rule", "add", ruleClassName);
digester.addFactoryCreate("*/set-top-rule", new SetTopRuleFactory());
digester.addRule("*/set-top-rule", new PatternRule(digester, "pattern"));
digester.addSetNext("*/set-top-rule", "add", ruleClassName);
digester.addFactoryCreate("*/set-next-rule", new SetNextRuleFactory());
digester.addRule("*/set-next-rule", new PatternRule(digester, "pattern"));
digester.addSetNext("*/set-next-rule", "add", ruleClassName);
}
protected class CallParamRuleFactory extends AbstractObjectCreationFactory {
// Old code
// public Object createObject(Attributes attributes) {
// // create callmethodrule
// int paramNumber = Integer.parseInt(attributes.getValue("paramnumber"));
// String methodName = attributes.getValue("attrname");
// Rule callMethodRule = new CallMethodRule(targetDigester, methodName,
// paramNumber);
// return callMethodRule;
// }
// End of old code
/********************************************************************************/
//
// Modified by Philippe Mouawad
//
//
// Modified by Philippe Mouawad
//
public Object createObject(Attributes attributes) {
// create callmethodrule
int paramNumber = Integer.parseInt(attributes.getValue("paramnumber"));
String attrName = attributes.getValue("attrname");
Rule callParamRule = new CallParamRule(targetDigester, paramNumber,
attrName);
return callParamRule ;
}
//
// End of modification
//
/********************************************************************************/
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>