Example usage for org.xml.sax.ext EntityResolver2 EntityResolver2

List of usage examples for org.xml.sax.ext EntityResolver2 EntityResolver2

Introduction

In this page you can find the example usage for org.xml.sax.ext EntityResolver2 EntityResolver2.

Prototype

EntityResolver2

Source Link

Usage

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

/**
 * Parsing builder configuration file/*from w w  w  . ja  v  a 2 s.  c  om*/
 * 
 * @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;
}

From source file:org.entcore.feeder.aaf.BaseImportProcessing.java

protected void parse(final Handler<Message<JsonObject>> handler, final ImportProcessing importProcessing) {
    final String[] files = vertx.fileSystem().readDirSync(path, getFileRegex());
    final VoidHandler[] handlers = new VoidHandler[files.length + 1];
    handlers[handlers.length - 1] = new VoidHandler() {
        @Override/*  w  ww .java 2  s .  c  om*/
        protected void handle() {
            next(handler, importProcessing);
        }
    };
    Arrays.sort(files);
    for (int i = files.length - 1; i >= 0; i--) {
        final int j = i;
        handlers[i] = new VoidHandler() {
            @Override
            protected void handle() {
                try {
                    String file = files[j];
                    log.info("Parsing file : " + file);
                    byte[] encoded = Files.readAllBytes(Paths.get(file));
                    String content = UNESCAPE_AAF.translate(new String(encoded, "UTF-8"));
                    InputSource in = new InputSource(new StringReader(content));
                    AAFHandler sh = new AAFHandler(BaseImportProcessing.this);
                    XMLReader xr = XMLReaderFactory.createXMLReader();
                    xr.setContentHandler(sh);
                    xr.setEntityResolver(new EntityResolver2() {
                        @Override
                        public InputSource getExternalSubset(String name, String baseURI)
                                throws SAXException, IOException {
                            return null;
                        }

                        @Override
                        public InputSource resolveEntity(String name, String publicId, String baseURI,
                                String systemId) throws SAXException, IOException {
                            return resolveEntity(publicId, systemId);
                        }

                        @Override
                        public InputSource resolveEntity(String publicId, String systemId)
                                throws SAXException, IOException {
                            if (systemId.equals("ficAlimMENESR.dtd")) {
                                Reader reader = new FileReader(path + File.separator + "ficAlimMENESR.dtd");
                                return new InputSource(reader);
                            } else {
                                return null;
                            }
                        }
                    });
                    xr.parse(in);
                    importer.flush(new Handler<Message<JsonObject>>() {
                        @Override
                        public void handle(Message<JsonObject> message) {
                            if ("ok".equals(message.body().getString("status"))) {
                                handlers[j + 1].handle(null);
                            } else {
                                error(message, handler);
                            }
                        }
                    });
                } catch (Exception e) {
                    error(e, handler);
                }
            }
        };
    }
    handlers[0].handle(null);
}