Example usage for org.apache.commons.digester Digester setEntityResolver

List of usage examples for org.apache.commons.digester Digester setEntityResolver

Introduction

In this page you can find the example usage for org.apache.commons.digester Digester setEntityResolver.

Prototype

public void setEntityResolver(EntityResolver entityResolver) 

Source Link

Document

Set the EntityResolver used by SAX when resolving public id and system id.

Usage

From source file:com.liusoft.sc.startup.DigesterFactory.java

/**
 * Create a <code>Digester</code> parser.
 * @param xmlValidation turn on/off xml validation
 * @param xmlNamespaceAware turn on/off namespace validation
 * @param rule an instance of <code>RuleSet</code> used for parsing the xml.
 *///from   w  w w  .  ja v a  2  s.c  om
public static Digester newDigester(boolean xmlValidation, boolean xmlNamespaceAware, RuleSet rule) {
    Digester digester = new Digester();
    digester.setNamespaceAware(xmlNamespaceAware);
    digester.setValidating(xmlValidation);
    digester.setUseContextClassLoader(true);

    if (xmlValidation || xmlNamespaceAware) {
        configureSchema(digester);
    }

    schemaResolver = new SchemaResolver(digester);
    registerLocalSchema();

    digester.setEntityResolver(schemaResolver);
    if (rule != null) {
        digester.addRuleSet(rule);
    }

    return (digester);
}

From source file:cucumber.templates.xml.DataAccessContextLocalTestHelper.java

/**
 * Creates and configures a new Digester instance.
 * @return such instance.//  w ww  .  j ava2s.c o m
 */
@NotNull
public Digester buildDataAccessContextLocalDigester() {
    @NotNull
    final Digester result = new Digester();

    // To avoid fetching external DTDs
    result.setEntityResolver(new EntityResolver() {
        @Override
        public InputSource resolveEntity(final String publicId, final String systemId)
                throws SAXException, IOException {
            return new InputSource(new ByteArrayInputStream("".getBytes()));
        }
    });
    // <beans>

    //   <bean>
    result.addFactoryCreate("beans/bean", new BeanElementFactory());

    //     <property>
    result.addFactoryCreate("beans/bean/property", new PropertyElementFactory());

    //     <value>
    result.addRule("beans/bean/property/value", new UntrimmedCallMethodRule("setValue", 0));
    //     </value>

    //     <ref>
    result.addFactoryCreate("beans/bean/property/ref", new RefElementFactory());
    //     </ref>

    result.addSetNext("beans/bean/property", "add");

    //   </property>

    result.addSetNext("beans/bean", "add");
    // </beans>

    return result;
}

From source file:de.micromata.genome.gwiki.page.gspt.taglibs.TagLibraryInfoImpl.java

protected void loadTagLibary(String uri) {
    Digester dig = new Digester();
    dig.setClassLoader(Thread.currentThread().getContextClassLoader());
    dig.setValidating(false);/* w w  w.jav a  2s.  co  m*/
    final EntityResolver parentResolver = dig.getEntityResolver();
    dig.setEntityResolver(new EntityResolver() {

        public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {

            InputStream is = null;
            if (StringUtils.equals(systemId, "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd") == true
                    || StringUtils.equals(publicId,
                            "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN") == true) {
                is = loadLocalDtd("web-jsptaglibrary_1_1.dtd");

            } else if (StringUtils.equals(systemId, "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd") == true
                    || StringUtils.equals(publicId,
                            "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN") == true) {
                is = loadLocalDtd("web-jsptaglibrary_1_2.dtd");
            }
            if (is == null) {
                if (parentResolver == null) {
                    GWikiLog.error("Cannot resolve entity: " + systemId);
                    return null;
                }
                return parentResolver.resolveEntity(publicId, systemId);
            }
            InputSource source = new InputSource(is);
            source.setPublicId(publicId);
            source.setSystemId(systemId);
            return source;
        }
    });
    dig.addCallMethod("taglib/tlib-version", "setTlibversion", 0);
    dig.addCallMethod("taglib/tlibversion", "setTlibversion", 0);
    dig.addCallMethod("taglib/jsp-version", "setJspversion", 0);
    dig.addCallMethod("taglib/jspversion", "setJspversion", 0);
    dig.addCallMethod("taglib/short-name", "setShortname", 0);
    dig.addCallMethod("taglib/shortname", "setShortname", 0);
    dig.addObjectCreate("taglib/tag", TagTmpInfo.class);
    dig.addCallMethod("taglib/tag/name", "setTagName", 0);
    dig.addCallMethod("taglib/tag/description", "setInfoString", 0);
    dig.addCallMethod("taglib/tag/tag-class", "setTagClassName", 0);
    dig.addCallMethod("taglib/tag/tagclass", "setTagClassName", 0);

    dig.addCallMethod("taglib/tag/body-content", "setBodycontent", 0);
    dig.addCallMethod("taglib/tag/bodycontent", "setBodycontent", 0);

    dig.addObjectCreate("taglib/tag/attribute", TagTmpAttributeInfo.class);
    dig.addCallMethod("taglib/tag/attribute/name", "setName", 0);
    dig.addCallMethod("taglib/tag/attribute/required", "setRequired", 0);
    dig.addCallMethod("taglib/tag/attribute/rtexprvalue", "setRtexprvalue", 0);
    dig.addSetNext("taglib/tag/attribute", "addAttributeInfo");
    dig.addSetNext("taglib/tag", "addTag");

    dig.push(this);
    try {
        InputStream is = loadImpl(uri);
        if (is == null) {
            throw new RuntimeException("could not load tld '" + uri + "'");
        }
        /*
         * ByteArrayOutputStream baos = new ByteArrayOutputStream(); IOUtils.copy(is, baos); String text =
         * Converter.stringFromBytes(baos.toByteArray()); dig.parse(new StringReader(text));
         */
        dig.parse(is);
        rework();
    } catch (Exception ex) {
        throw new RuntimeException(ex);
    }
}

From source file:com.npower.dm.hibernate.management.DDFTreeManagementBeanImpl.java

/**
 * Create digester for DDF XML. This digester rule is based on OMA DDF Spec
 * 1.1 Before call this method, push a DDFTreeEntity object into digester
 * stack.// w ww.j  av a 2 s .co  m
 * 
 * @return Digester
 */
private Digester createDDFTreeDigester() {

    // Initialize the digester
    Digester digester = new Digester();
    digester.setEntityResolver(new LocalEntityResolver());
    digester.setValidating(false);

    // Parsing DDF
    // digester.addObjectCreate("MgmtTree",
    // "com.npower.dm.hibernate.DDFTreeEntity");
    digester.addBeanPropertySetter("MgmtTree/Man", "manufacturer");
    digester.addBeanPropertySetter("MgmtTree/Mod", "model");
    digester.addBeanPropertySetter("MgmtTree/VerDTD", "specVersion");

    digester.addObjectCreate("*/Node", "com.npower.dm.hibernate.entity.DDFNodeEntity");
    digester.addBeanPropertySetter("*/Node/NodeName", "name");
    digester.addBeanPropertySetter("*/Node/Path", "path");
    digester.addBeanPropertySetter("*/Node/DFProperties/Description", "description");
    digester.addBeanPropertySetter("*/Node/DFProperties/DFTitle", "title");
    digester.addBeanPropertySetter("*/Node/DFProperties/DefaultValue", "defaultValue");

    digester.addBeanPropertySetter("*/Node/DFProperties/DFFormat/b64", "formatB64");
    digester.addBeanPropertySetter("*/Node/DFProperties/DFFormat/bin", "formatBin");
    digester.addBeanPropertySetter("*/Node/DFProperties/DFFormat/bool", "formatBool");
    digester.addBeanPropertySetter("*/Node/DFProperties/DFFormat/chr", "formatChr");
    digester.addBeanPropertySetter("*/Node/DFProperties/DFFormat/int", "formatInt");
    digester.addBeanPropertySetter("*/Node/DFProperties/DFFormat/node", "formatNode");
    digester.addBeanPropertySetter("*/Node/DFProperties/DFFormat/xml", "formatXml");
    digester.addBeanPropertySetter("*/Node/DFProperties/DFFormat/null", "formatNull");

    digester.addBeanPropertySetter("*/Node/DFProperties/Occurrence/One", "occurrenceOne");
    digester.addBeanPropertySetter("*/Node/DFProperties/Occurrence/ZeroOrOne", "occurrenceZeroOrOne");
    digester.addBeanPropertySetter("*/Node/DFProperties/Occurrence/ZeroOrMore", "occurrenceZeroOrMore");
    digester.addBeanPropertySetter("*/Node/DFProperties/Occurrence/OneOrMore", "occurrenceOneOrMore");
    digester.addBeanPropertySetter("*/Node/DFProperties/Occurrence/ZeroOrN", "occurrenceZeroOrN");
    digester.addBeanPropertySetter("*/Node/DFProperties/Occurrence/OneOrN", "occurrenceOneOrN");

    digester.addBeanPropertySetter("*/Node/DFProperties/Scope/Permanent", "scopePermanent");
    digester.addBeanPropertySetter("*/Node/DFProperties/Scope/Dynamic", "scopeDynamic");

    digester.addBeanPropertySetter("*/Node/DFProperties/AccessType/Add", "accessTypeAdd");

    digester.addBeanPropertySetter("*/Node/DFProperties/AccessType/Copy", "accessTypeCopy");
    digester.addBeanPropertySetter("*/Node/DFProperties/AccessType/Delete", "accessTypeDelete");
    digester.addBeanPropertySetter("*/Node/DFProperties/AccessType/Exec", "accessTypeExec");
    digester.addBeanPropertySetter("*/Node/DFProperties/AccessType/Get", "accessTypeGet");
    digester.addBeanPropertySetter("*/Node/DFProperties/AccessType/Replace", "accessTypeReplace");

    // digester.addBeanPropertySetter("*/Node/DFProperties/DFType/DDFName",
    // "ddfName");
    digester.addBeanPropertySetter("*/Node/DFProperties/DFType/MIME", "mimeTypeString");

    digester.addSetNext("*/Node", "add", "com.npower.dm.hibernate.entity.DDFNodeEntity");

    // digester.addSetNext("MgmtTree", "add", "DDFTreeEntity");

    return (digester);
}

From source file:com.sun.faces.config.DigesterFactory.java

/**
 * <p>Configures the provided <code>Digester</code> instance appropriate
 * for use with JSF.</p>/*from www . jav a 2 s.  co m*/
 * @param digester - the <code>Digester</code> instance to configure
 */
private void configureDigester(Digester digester) {

    digester.setNamespaceAware(true);
    digester.setUseContextClassLoader(true);
    digester.setEntityResolver(RESOLVER);
    digester.setErrorHandler(ERROR_HANDLER);
    // disable digester log messages
    digester.setLogger(new NoOpLog());

    if (validating) {

        if (logger.isLoggable(Level.FINE)) {
            logger.log(Level.FINE, "Attempting to configure Digester to perform" + " document validation.");
        }

        // In order to validate using *both* DTD and Schema, certain
        // Xerces specific features are required.  Try to set these
        // features.  If an exception is thrown trying to set these
        // features, then disable validation.

        try {
            digester.setFeature(XERCES_VALIDATION, true);
            digester.setFeature(XERCES_SCHEMA_VALIDATION, true);
            digester.setFeature(XERCES_SCHEMA_CONSTRAINT_VALIDATION, true);
            digester.setValidating(true);
        } catch (SAXNotSupportedException e) {

            if (logger.isLoggable(Level.WARNING)) {
                logger.log(Level.WARNING, "Attempt to set supported feature on XMLReader, "
                        + "but the value provided was not accepted.  " + "Validation will be disabledb.");
            }

            digester.setValidating(false);

        } catch (SAXNotRecognizedException e) {

            if (logger.isLoggable(Level.WARNING)) {
                logger.log(Level.WARNING, "Attempt to set unsupported feature on XMLReader"
                        + " necessary for validation.  Validation will be" + "disabled.");
            }

            digester.setValidating(false);

        } catch (ParserConfigurationException e) {

            if (logger.isLoggable(Level.WARNING)) {
                logger.log(Level.WARNING,
                        "Digester unable to configure underlying parser." + "  Validation will be disabled.");
            }

            digester.setValidating(false);

        }
    } else {
        digester.setValidating(false);
    }

}

From source file:it.jnrpe.server.config.CJNRPEConfiguration.java

private CJNRPEConfiguration(File fileName) {
    if (!fileName.exists() || !fileName.canRead()) {
        // TODO: throw an exception
        m_Logger.fatal("UNABLE TO READ CONFIGURATION FILE " + fileName.getAbsolutePath());
        System.exit(-1);/* w w w  . j a  v  a  2s.  com*/
    }

    try {
        Digester digester = DigesterLoader.createDigester(
                new InputSource(System.class.getResourceAsStream("/it/jnrpe/server/config/digester.xml")));
        // turn on XML schema validation
        digester.setFeature("http://xml.org/sax/features/validation", true);
        digester.setFeature("http://apache.org/xml/features/validation/schema", true);
        digester.setFeature("http://xml.org/sax/features/namespaces", true);
        digester.setEntityResolver(new CConfigValidationEntityResolver());
        digester.setErrorHandler(new CConfigErrorHandler());

        m_Configuration = (CConfiguration) digester.parse(fileName);
    } catch (Exception e) {
        // TODO: throw an exception
        m_Logger.fatal("UNABLE TO PARSE CONFIGURATION : " + e.getMessage());
        System.exit(-1);
    }
}

From source file:com.ocpsoft.pretty.faces.el.resolver.FacesConfigBeanNameResolver.java

/**
 * Process a single <code>faces-config.xml</code> file and add all beans
 * found to the supplied list of {@link FacesConfigEntry} objects.
 * // w w  w .  ja  va 2s. c  o m
 * @param url
 *           The faces-config.xml file
 * @param facesConfigEntries
 *           list of entries to add the beans to
 */
private void processFacesConfig(URL url, List<FacesConfigEntry> facesConfigEntries) {

    // log name of current file
    if (log.isTraceEnabled()) {
        log.trace("Loading bean names from: " + url.toString());
    }

    // setup digester
    Digester digester = new Digester();

    /*
     * We use the context class loader to resolve classes.
     * This fixes ClassNotFoundExceptions on Geronimo.
     */
    digester.setUseContextClassLoader(true);

    // prevent downloading of DTDs
    digester.setEntityResolver(new EmptyEntityResolver());

    digester.setValidating(false);
    digester.push(facesConfigEntries);
    digester.addObjectCreate("faces-config/managed-bean", FacesConfigEntry.class);
    digester.addCallMethod("faces-config/managed-bean/managed-bean-name", "setName", 0);
    digester.addCallMethod("faces-config/managed-bean/managed-bean-class", "setBeanClass", 0);
    digester.addSetNext("faces-config/managed-bean", "add");

    // stream used to read faces-config.xml file
    InputStream stream = null;

    try {
        // open the file and let digester pares it
        stream = url.openStream();
        digester.parse(stream);

    } catch (IOException e) {
        // may be thrown when reading the file
        log.error("Failed to parse: " + url.toString(), e);
    } catch (SAXException e) {
        // parsing errors
        log.error("Failed to parse: " + url.toString(), e);
    } finally {
        // close stream
        if (stream != null) {
            try {
                stream.close();
            } catch (IOException e) {
                // ignore IOExceptions on close
            }

        }
    }

}

From source file:com.icesoft.faces.webapp.parser.TagToComponentMap.java

/**
 * Same as addTags but this one has more info such as attributes/descriptions
 *
 * @param tldInput The TLD to process/*ww  w  .  j  av a 2s .c o m*/
 * @throws IOException If digester barfs.
 */
public void addTagAttrib(InputStream tldInput) throws IOException {

    Digester digester = new Digester();
    digester.setNamespaceAware(true);
    digester.setValidating(false);
    digester.setEntityResolver(ParserUtils.entityResolver);
    digester.setUseContextClassLoader(false);

    /* Need to set the class loader to work.  Not sure why.
       May need to change when we move behind servlet container or Tomcat */
    digester.setClassLoader(loader);

    // This rule creates an element we can use to populate the map;
    digester.addObjectCreate("taglib/tag", "com.icesoft.faces.webapp.parser.TagToTagClassElement");
    digester.addObjectCreate("taglib/uri", "java.lang.StringBuffer");

    // This rule pushes everything into the hash table;
    NameRule nRule = new NameRule(tagToComponentMap, faceletsTaglibXmlWriter);
    digester.addRule("taglib/tag", nRule);
    digester.addRule("taglib/uri", nRule);

    // These rules scoop the values from <name> and <tag-class> elements;
    digester.addCallMethod("taglib/tag/name", "setTagName", 0);
    digester.addCallMethod("taglib/tag/tag-class", "setTagClass", 0);
    digester.addCallMethod("taglib/tag/description", "setDescription", 0);
    digester.addCallMethod("taglib/uri", "append", 0);

    digester.addObjectCreate("taglib/tag/attribute", "com.icesoft.faces.webapp.parser.AttributeElement");

    digester.addCallMethod("taglib/tag/attribute/name", "setName", 0);
    digester.addCallMethod("taglib/tag/attribute/required", "setRequired", 0);
    digester.addCallMethod("taglib/tag/attribute/description", "setDescription", 0);
    digester.addSetNext("taglib/tag/attribute", "addAttribute");

    try {
        digester.parse(tldInput);
    } catch (Throwable e) {
        IOException ioe = new IOException("Can't parse tld " + tldInput.toString());
        ioe.initCause(e);
        throw ioe;
    } finally {
        tldInput.close();
    }
}

From source file:net.java.dev.weblets.impl.WebletContainerImpl.java

/**
 * registers the configuration file/*  ww  w .  j a  va 2s. c om*/
 * in its internal data structure
 *
 * @param webletsConfig the weblets config to be registered
 */
public void registerConfig(URL webletsConfig) {
    try {
        InputStream in = webletsConfig.openStream();
        try {
            Digester digester = new Digester();
            digester.setClassLoader(getLoader());
            digester.setValidating(false);
            digester.setClassLoader(getLoader());

            digester.setEntityResolver(DisconnectedEntityResolver.sharedInstance());
            digester.push(this);
            digester.addFactoryCreate(Const.WEBLETS_CONFIG + Const.PAR_WEBLET, WEBLET_CONFIG_FACTORY);
            digester.addSetNext(Const.WEBLETS_CONFIG + Const.PAR_WEBLET, "addWeblet",
                    WebletConfigImpl.class.getName());
            digester.addCallMethod(Const.WEBLETS_CONFIG + Const.PAR_WEBLET + Const.PAR_WEBLET_NAME,
                    "setWebletName", Const.FIRST_PARAM);
            digester.addCallMethod(Const.WEBLETS_CONFIG + Const.PAR_WEBLET + Const.PAR_WEBLET_CLASS,
                    "setWebletClass", Const.FIRST_PARAM);
            digester.addCallMethod(Const.WEBLETS_CONFIG + Const.PAR_WEBLET + Const.PAR_WEBLET_VERSION,
                    "setWebletVersion", Const.FIRST_PARAM);
            digester.addCallMethod(Const.WEBLETS_CONFIG + Const.PAR_WEBLET + Const.PAR_INIT_PARAM,
                    "addInitParam", Const.TWO_PARAMS);
            digester.addCallParam(
                    Const.WEBLETS_CONFIG + Const.PAR_WEBLET + Const.PAR_INIT_PARAM + Const.PAR_PARAM_NAME,
                    Const.FIRST_PARAM);
            digester.addCallParam(
                    Const.WEBLETS_CONFIG + Const.PAR_WEBLET + Const.PAR_INIT_PARAM + Const.PAR_PARAM_VALUE,
                    Const.SECOND_PARAM);
            digester.addCallMethod(Const.WEBLETS_CONFIG + Const.PAR_WEBLET + Const.PAR_MIME_MAPPING,
                    "addMimeMapping", Const.TWO_PARAMS);
            digester.addCallParam(
                    Const.WEBLETS_CONFIG + Const.PAR_WEBLET + Const.PAR_MIME_MAPPING + Const.PAR_EXTENSION,
                    Const.FIRST_PARAM);
            digester.addCallParam(
                    Const.WEBLETS_CONFIG + Const.PAR_WEBLET + Const.PAR_MIME_MAPPING + Const.PAR_MIME_TYPE,
                    Const.SECOND_PARAM);
            digester.addCallMethod(Const.WEBLETS_CONFIG + Const.PAR_WEBLET_MAPPING, "setWebletMapping",
                    Const.TWO_PARAMS);
            digester.addCallParam(Const.WEBLETS_CONFIG + Const.PAR_WEBLET_MAPPING + Const.PAR_WEBLET_NAME,
                    Const.FIRST_PARAM);
            digester.addCallParam(Const.WEBLETS_CONFIG + Const.PAR_WEBLET_MAPPING + Const.PAR_URL_PATTERN,
                    Const.SECOND_PARAM);
            digester.addCallMethod(Const.WEBLETS_CONFIG + Const.PAR_WEBLET + Const.PAR_SUBBUNDLE,
                    Const.FUNC_ADD_SUBBUNDLE, Const.TWO_PARAMS);
            digester.addCallParam(Const.WEBLETS_CONFIG + Const.PAR_WEBLET + Const.PAR_SUBBUNDLE + Const.PAR_ID,
                    Const.FIRST_PARAM);
            digester.addCallParam(
                    Const.WEBLETS_CONFIG + Const.PAR_WEBLET + Const.PAR_SUBBUNDLE + Const.PAR_RESOURCES,
                    Const.SECOND_PARAM);
            digester.parse(in);
        } finally {
            in.close();
        }
    } catch (IOException e) {
        throw new WebletException(e);
    } catch (SAXException e) {
        throw new WebletException(e);
    }
}

From source file:org.ajax4jsf.builder.config.BuilderConfig.java

/**
 * Parsing builder configuration file/* www  . j ava2  s.c o  m*/
 * 
 * @param configFile
 * @throws ParsingException
 */
public void parseConfig(final File configFile) throws ParsingException {
    getLog().info(" Parse config file " + configFile.toString());
    Digester digester = new Digester();
    digester.setRules(new ExtendedBaseRules());
    digester.setValidating(false);
    digester.setNamespaceAware(false);
    // try {
    // URL dtd =
    // this.getClass().getClassLoader().getResource(COMPONENT_CONFIG_DTD_URI);
    // new
    // URL("resource:/com/exadel/vcp/builder/config/component-config.dtd");
    getLog().debug("Register config DTD as URI " + COMPONENT_CONFIG_DTD_URI);
    digester.register(GENERATOR_CONFIG_PUBLIC_ID, COMPONENT_CONFIG_DTD_URI);
    // } catch (MalformedURLException e) {
    // throw new ParsingException("Malformed URL for internal DTD
    // reference",e);
    // }

    // setup custom entity resolver for handle file-resource path's
    // resolve DTD even it not pointed in file, and, for entities - resolve
    // it in
    // classpath if entity registered in DTD witn path /META-INF/schema
    digester.setEntityResolver(new EntityResolver2() {

        /*
         * (non-Javadoc)
         * 
         * @see org.xml.sax.EntityResolver#resolveEntity(java.lang.String,
         *      java.lang.String)
         */
        public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
            getLog().debug("Request for entity with systemId " + systemId + " and publicId " + publicId);
            if (GENERATOR_CONFIG_PUBLIC_ID.equals(publicId)) {
                return getDTDSource();
            } else if (null != publicId && null != systemId && systemId.contains(ENTITIES_FOLDER)) {
                int base = systemId.indexOf(ENTITIES_FOLDER);
                String entity = COMPONENT_SCHEMA_BASE + systemId.substring(base);
                getLog().debug("attempt to load entity from classpath " + entity);
                InputStream entityStream = BuilderConfig.class.getResourceAsStream(entity);
                if (null != entityStream) {
                    return new InputSource(entityStream);
                }
            }
            return null;
        }

        public InputSource getExternalSubset(String name, String baseURI) throws SAXException, IOException {
            getLog().debug("Request for ExternalSubset with name " + name + " and baseURI " + baseURI);
            if (GENERATOR_CONFIG_ROOT_ELEMENT.equals(name)) {
                return getDTDSource();
            }
            return null;
        }

        public InputSource resolveEntity(String name, String publicId, String baseURI, String systemId)
                throws SAXException, IOException {
            getLog().debug(
                    "Request for extended entity with systemId " + systemId + " and publicId " + publicId);
            getLog().debug("additional parameters with name " + name + " and baseURI " + baseURI);
            if ("[dtd]".equals(name) && GENERATOR_CONFIG_PUBLIC_ID.equals(publicId)) {
                return getDTDSource();
            } else if (null == name || (!name.startsWith("[") && !name.startsWith("&"))) {
                return resolveEntity(publicId, systemId);
            }
            return null;
        }

        /**
         * Resolve config DTD from classpath
         * 
         * @return source of config file DTD
         */
        private InputSource getDTDSource() {
            return new InputSource(BuilderConfig.class.getResourceAsStream(COMPONENT_CONFIG_DTD_URI));
        }

    });

    // Parsing rules.

    // Components
    String path = "components/component";
    digester.addObjectCreate(path, ComponentBean.class);
    digester.addBeanPropertySetter(path + "/name");
    digester.addBeanPropertySetter(path + "/family");
    digester.addBeanPropertySetter(path + "/classname");
    digester.addBeanPropertySetter(path + "/superclass");
    digester.addBeanPropertySetter(path + "/description");
    digester.addBeanPropertySetter(path + "/displayname");
    digester.addBeanPropertySetter(path + "/icon");
    // TODO - for superclass, populate from description in config file, if
    // exist
    digester.addSetProperties(path);
    digester.addSetNext(path, "addComponent");
    path = "components/renderer";
    digester.addObjectCreate(path, RendererBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "addRenderer");
    path = "components/component/renderer";
    digester.addObjectCreate(path, RendererBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "setRenderer");

    path = "components/component/facet";
    digester.addObjectCreate(path, JsfBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "addFacet");
    path = "components/component/event";
    digester.addObjectCreate(path, EventBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "addEvent");

    // Validators

    path = "components/validator";
    digester.addObjectCreate(path, ValidatorBean.class);
    digester.addBeanPropertySetter(path + "/id");
    digester.addBeanPropertySetter(path + "/classname");
    digester.addBeanPropertySetter(path + "/superclass");
    digester.addBeanPropertySetter(path + "/description");
    digester.addBeanPropertySetter(path + "/displayname");
    digester.addBeanPropertySetter(path + "/icon");
    // TODO - for superclass, populate from description in config file, if
    // exist
    digester.addSetProperties(path);
    digester.addSetNext(path, "addValidator");

    path = "components/validator/property";
    digester.addObjectCreate(path, PropertyBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "addProperty");

    // Converters

    path = "components/converter";
    digester.addObjectCreate(path, ConverterBean.class);
    digester.addBeanPropertySetter(path + "/id");
    digester.addBeanPropertySetter(path + "/classname");
    digester.addBeanPropertySetter(path + "/superclass");
    digester.addBeanPropertySetter(path + "/description");
    digester.addBeanPropertySetter(path + "/displayname");
    digester.addBeanPropertySetter(path + "/icon");
    digester.addBeanPropertySetter(path + "/forclass");
    // TODO - for superclass, populate from description in config file, if
    // exist
    digester.addSetProperties(path);
    digester.addSetNext(path, "addConverter");

    // Functions

    path = "components/function";
    digester.addObjectCreate(path, FunctionBean.class);
    digester.addBeanPropertySetter(path + "/name");
    digester.addBeanPropertySetter(path + "/description");
    digester.addBeanPropertySetter(path + "/method");
    digester.addSetNext(path, "addFunction");

    // - Tags & Tag handlers

    path = "components/component/tag";
    digester.addObjectCreate(path, TagBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "setTag");

    path = "components/validator/tag";
    digester.addObjectCreate(path, TagBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "setTag");

    path = "components/converter/tag";
    digester.addObjectCreate(path, TagBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "setTag");

    path = "components/component/tag/test";
    digester.addObjectCreate(path, TagTestClassHolder.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "setTest");

    path = "components/component/test";
    digester.addObjectCreate(path, TestClassHolder.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "setTest");

    path = "components/component/taghandler";
    digester.addObjectCreate(path, TagHandlerBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "setTaghandler");
    /*
          * path = "components/component/taghandler/test";
          * digester.addObjectCreate(path, TestClassHolder.class);
          * digester.addBeanPropertySetter(path+"/?");
          * digester.addSetProperties(path); digester.addSetNext(path,
          * "setTest");
          */

    // Properties
    path = "components/component/property";
    digester.addObjectCreate(path, PropertyBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "addProperty");

    // path = "components/validator/property";
    // digester.addObjectCreate(path, PropertyBean.class);
    // digester.addBeanPropertySetter(path+"/?");
    // digester.addSetProperties(path);
    // digester.addSetNext(path, "addProperty");

    path = "components/converter/property";
    digester.addObjectCreate(path, PropertyBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "addProperty");

    path = "*/properties/property";
    digester.addObjectCreate(path, PropertyBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "addProperty");

    // Listeners

    path = "components/listener";
    digester.addObjectCreate(path, ListenerBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "addListener");
    path = "components/listener/tag";
    digester.addObjectCreate(path, TagBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "setTag");
    path = "components/listener/taghandler";
    digester.addObjectCreate(path, TagHandlerBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "setTaghandler");
    path = "components/listener/property";
    digester.addObjectCreate(path, PropertyBean.class);
    digester.addBeanPropertySetter(path + "/?");
    digester.addSetProperties(path);
    digester.addSetNext(path, "addProperty");

    // Set this config as root.
    digester.push(this);
    try {
        digester.parse(configFile.toString());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        throw new ParsingException("I/O error on parsing config file ", e);
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        throw new ParsingException("SAX Parsing error in config file ", e);
    }
    // checkComopnentProperties();
    // return this;
}