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]>