/** * This is only invoked after all child elements have been processed, * so we can remove the custom Rules object that does the * child-element-matching. */ @Override public void body(String bodyText) throws Exception { AnyChildRules newRules = (AnyChildRules) digester.getRules(); digester.setRules(newRules.getOldRules()); }
/** * Creates an instance of the indicated class. The class must implement * the DigesterRulesSource interface. Passes the target digester to * that instance. The DigesterRulesSource instance is supposed to add * rules into the digester. The contents of the current pattern stack * will be automatically prepended to all of the pattern strings added * by the DigesterRulesSource instance. */ private void includeProgrammaticRules(String className) throws ClassNotFoundException, ClassCastException, InstantiationException, IllegalAccessException { Class<?> cls = Class.forName(className); DigesterRulesSource rulesSource = (DigesterRulesSource) cls.newInstance(); // wrap the digester's Rules object, to prepend pattern Rules digesterRules = targetDigester.getRules(); Rules prefixWrapper = new RulesPrefixAdapter(patternStack.toString(), digesterRules); targetDigester.setRules(prefixWrapper); try { rulesSource.getRules(targetDigester); } finally { // Put the unwrapped rules back targetDigester.setRules(digesterRules); } } }
/** * Process the beginning of this element. * * @param namespace is the namespace this attribute is in, or null * @param name is the name of the current xml element * @param attributes is the attribute list of this element */ @Override public void begin(String namespace, String name, Attributes attributes) throws Exception { Rules oldRules = digester.getRules(); AnyChildRule anyChildRule = new AnyChildRule(); anyChildRule.setDigester(digester); AnyChildRules newRules = new AnyChildRules(anyChildRule); newRules.init(digester.getMatch()+"/", oldRules); digester.setRules(newRules); }
digester.setRules(newRules);
/** * Invoked by the digester when the closing tag matching this Rule's * pattern is encountered. * </p> * * @param namespace Description of the Parameter * @param name Description of the Parameter * @exception Exception Description of the Exception * * @see #begin */ @Override public void end(String namespace, String name) throws Exception { // see body method for more info String path = digester.getMatch(); PluginRules newRules = (PluginRules) digester.getRules(); List<Rule> rules = newRules.getDecoratedRules().match(namespace, path); fireEndMethods(rules, namespace, name); // pop the stack of PluginRules instances, which // discards all custom rules associated with this plugin digester.setRules(newRules.getParent()); // and get rid of the instance of the plugin class from the // digester object stack. digester.pop(); }
/** * This is only invoked after all child elements have been processed, * so we can remove the custom Rules object that does the * child-element-matching. */ public void body(String bodyText) throws Exception { AnyChildRules newRules = (AnyChildRules) digester.getRules(); digester.setRules(newRules.getOldRules()); }
/** * Creates an instance of the indicated class. The class must implement * the DigesterRulesSource interface. Passes the target digester to * that instance. The DigesterRulesSource instance is supposed to add * rules into the digester. The contents of the current pattern stack * will be automatically prepended to all of the pattern strings added * by the DigesterRulesSource instance. */ private void includeProgrammaticRules(String className) throws ClassNotFoundException, ClassCastException, InstantiationException, IllegalAccessException { Class<?> cls = Class.forName(className); DigesterRulesSource rulesSource = (DigesterRulesSource) cls.newInstance(); // wrap the digester's Rules object, to prepend pattern Rules digesterRules = targetDigester.getRules(); Rules prefixWrapper = new RulesPrefixAdapter(patternStack.toString(), digesterRules); targetDigester.setRules(prefixWrapper); try { rulesSource.getRules(targetDigester); } finally { // Put the unwrapped rules back targetDigester.setRules(digesterRules); } } }
import java.io.*; import java.util.*; import org.apache.commons.digester.*; public class FurnitureDigest { public static void main(String[] args) throws Exception { File file = new File("furniture.xml"); Digester digester = new Digester(); digester.setRules(new ExtendedBaseRules()); final List<String> furnitures = new ArrayList<String>(); digester.addRule("furniture/?", new Rule() { @Override public void end(String nspace, String name) { furnitures.add(name); } }); digester.parse(file); System.out.println(furnitures); // prints "[sofa, coffeeTable]" } }
public class App { final static Rule printRule = new Rule() { public void begin(String namespace, String name, Attributes attributes) throws Exception { System.out.println(name); } }; public static void main( String[] args ) throws IOException, SAXException { InputStream instr = App.class.getResourceAsStream("/sample.xml"); Digester dig = new Digester(); dig.setRules(new RulesBase(){ public List<Rule> match(String namespaceURI, String pattern) { return Arrays.asList(printRule); } }); dig.parse(instr); } }
import java.io.*; import java.util.*; import org.apache.commons.digester.*; public class DigestToMap { @SuppressWarnings("unchecked") public static void main(String[] args) throws Exception { File file = new File("digestme.xml"); Digester digester = new Digester(); digester.setRules(new ExtendedBaseRules()); digester.addObjectCreate("data", HashMap.class); digester.addRule("data/?", new Rule() { @Override public void end(String nspace, String name) { ((HashMap<String,String>)getDigester().peek()).put("[ID]", name); } }); digester.addRule("*", new Rule() { @Override public void body(String nspace, String name, String text) { ((HashMap<String,String>)getDigester().peek()).put(name, text); } }); Map<String,String> map = (Map<String,String>) digester.parse(file); System.out.println(map); } }
/** * <p>Obtain a SCXML digester instance for further customization.</p> * <b>API Notes:</b> * <ul> * <li>Use the digest() convenience methods if you do not * need a custom digester.</li> * <li>After the SCXML document is parsed by the customized digester, * the object model <b>must</b> be made executor-ready by calling * <code>updateSCXML(SCXML)</code> method in this class.</li> * </ul> * * @param scxml The parent SCXML document if there is one (in case of * state templates for example), null otherwise * @param pr The PathResolver, may be null for standalone documents * @param customActions The list of {@link CustomAction}s this digester * instance will process, can be null or empty * @return Digester A newly configured SCXML digester instance * * @see SCXMLDigester#updateSCXML(SCXML) */ public static Digester newInstance(final SCXML scxml, final PathResolver pr, final List customActions) { Digester digester = new Digester(); digester.setNamespaceAware(true); //Uncomment next line after SCXML DTD is available //digester.setValidating(true); digester.setRules(initRules(scxml, pr, customActions)); return digester; }
/** * Process the beginning of this element. * * @param namespace is the namespace this attribute is in, or null * @param name is the name of the current xml element * @param attributes is the attribute list of this element */ public void begin(String namespace, String name, Attributes attributes) throws Exception { Rules oldRules = digester.getRules(); AnyChildRule anyChildRule = new AnyChildRule(); anyChildRule.setDigester(digester); AnyChildRules newRules = new AnyChildRules(anyChildRule); newRules.init(digester.getMatch()+"/", oldRules); digester.setRules(newRules); }
Digester digester = new Digester(); digester.setRules(new ExtendedBaseRules()); digester.setValidating( false ); digester.addObjectCreate("rows", Addresses.class); digester.addObjectCreate( "rows/row", Address.class ); digester.addSetNext( "rows/row", "add"); digester.addSetProperties("rows/row"); digester.addCallMethod("rows/row/*", "addAddressLine", 2); digester.addRule("rows/row/*", new TagNameAwarePathCallParamRule(0)); digester.addCallParam("rows/row/*", 1); Addresses addresses = (Addresses) digester.parse(new File(FILE_TO_PARSE));
/** * @return fully-initialized Digester used to process entry XML files */ protected Digester buildDigester(String schemaLocation, String digestorRulesFileName) { Digester digester = new Digester(); digester.setNamespaceAware(false); digester.setValidating(true); digester.setErrorHandler(new XmlErrorHandler()); digester.setSchema(schemaLocation); Rules rules = loadRules(digestorRulesFileName); digester.setRules(rules); return digester; }
digester.setRules(newRules);
new WithDefaultsRulesWrapper(initRules(scxml, pr, customActions)); rules.addDefault(new IgnoredElementRule()); digester.setRules(rules); return digester;
/** * Invoked by the digester when the closing tag matching this Rule's * pattern is encountered. * </p> * * @param namespace Description of the Parameter * @param name Description of the Parameter * @exception Exception Description of the Exception * * @see #begin */ public void end(String namespace, String name) throws Exception { // see body method for more info String path = digester.getMatch(); PluginRules newRules = (PluginRules) digester.getRules(); List<Rule> rules = newRules.getDecoratedRules().match(namespace, path); fireEndMethods(rules, namespace, name); // pop the stack of PluginRules instances, which // discards all custom rules associated with this plugin digester.setRules(newRules.getParent()); // and get rid of the instance of the plugin class from the // digester object stack. digester.pop(); }
private void configure() { // configure from config file try { Digester digester = newDigester(); digester.push(this); digester.setRules(new ExtendedBaseRules()); // load pop servers digester.addObjectCreate("mail-servers/pop-server", getPopMailServerClass()); digester.addSetProperties("mail-servers/pop-server"); digester.addBeanPropertySetter("mail-servers/pop-server/?"); digester.addSetRoot("mail-servers/pop-server", "create"); // load smtp servers digester.addObjectCreate("mail-servers/smtp-server", getSMTPMailServerClass()); digester.addSetProperties("mail-servers/smtp-server"); digester.addBeanPropertySetter("mail-servers/smtp-server/?"); digester.addBeanPropertySetter("mail-servers/smtp-server/jndi-location", "jndiLocation"); digester.addSetRoot("mail-servers/smtp-server", "create"); InputStream is = getConfigurationInputStream(configFile); digester.parse(is); } catch (Exception e) { log.fatal(e, e); throw new RuntimeException("Error in mail config: " + e.getMessage(), e); } }