Example usage for javax.xml.transform URIResolver URIResolver

List of usage examples for javax.xml.transform URIResolver URIResolver

Introduction

In this page you can find the example usage for javax.xml.transform URIResolver URIResolver.

Prototype

URIResolver

Source Link

Usage

From source file:org.alfresco.repo.template.XSLTProcessor.java

/**
 * @param templateSource/*from w  w w.j av  a 2s . c  o  m*/
 * @param model
 * @param out
 */
private void process(TemplateSource templateSource, Object model, Writer out) {
    if ((model == null) || !XSLTemplateModel.class.isAssignableFrom(model.getClass())) {
        throw new IllegalArgumentException("\"model\" must be an XSLTemplateModel object: " + model);
    }

    XSLTemplateModel xsltModel = (XSLTemplateModel) model;
    System.setProperty("org.apache.xalan.extensions.bsf.BSFManager", BSFManager.class.getName());

    Document xslTemplate;
    try {
        xslTemplate = XMLUtil.parse(templateSource.getReader(defaultEncoding));
    } catch (IOException ex) {
        throw new TemplateException(MSG_UNABLE_TO_READ_TEMPLATE, new Object[] { ex.getMessage() }, ex);
    } catch (SAXException sax) {
        throw new TemplateException(MSG_UNABLE_TO_PARSE_TEMPLATE, new Object[] { sax.getMessage() }, sax);
    } finally {
        try {
            templateSource.close();
        } catch (IOException ex) {
            // There's little to be done here. Log it and carry on
            log.warn("Error while trying to close template stream", ex);
        }
    }

    List<String> scriptIds = addScripts(xsltModel, xslTemplate);
    addParameters(xsltModel, xslTemplate);

    final LinkedList<TransformerException> errors = new LinkedList<TransformerException>();
    final ErrorListener errorListener = new ErrorListener() {
        public void error(final TransformerException te) throws TransformerException {
            log.debug("error " + te.getMessageAndLocation());
            errors.add(te);
        }

        public void fatalError(final TransformerException te) throws TransformerException {
            log.debug("fatalError " + te.getMessageAndLocation());
            throw te;
        }

        public void warning(final TransformerException te) throws TransformerException {
            log.debug("warning " + te.getMessageAndLocation());
            errors.add(te);
        }
    };

    final TemplateSource resourceSource = templateSource;
    final URIResolver uriResolver = new URIResolver() {
        public Source resolve(final String href, String base) throws TransformerException {
            if (log.isDebugEnabled()) {
                log.debug("request to resolve href " + href + " using base " + base);
            }
            InputStream in = null;
            try {
                in = resourceSource.getResource(href);
                if (in == null) {
                    throw new TransformerException("unable to resolve href " + href);
                }

                Document d = XMLUtil.parse(in);
                if (log.isDebugEnabled()) {
                    log.debug("loaded " + XMLUtil.toString(d));
                }
                return new DOMSource(d);
            } catch (TransformerException ex) {
                throw ex;
            } catch (Exception e) {
                throw new TransformerException("unable to load " + href, e);
            }
        }
    };

    Source xmlSource = this.getXMLSource(xsltModel);

    Transformer t = null;
    try {
        final TransformerFactory tf = TransformerFactory.newInstance();
        tf.setErrorListener(errorListener);
        tf.setURIResolver(uriResolver);

        if (log.isDebugEnabled()) {
            log.debug("xslTemplate: \n" + XMLUtil.toString(xslTemplate));
        }

        t = tf.newTransformer(new DOMSource(xslTemplate));

        if (errors.size() != 0) {
            final StringBuilder msg = new StringBuilder("errors encountered creating tranformer ... \n");
            for (TransformerException te : errors) {
                msg.append(te.getMessageAndLocation()).append("\n");
            }
            throw new TemplateException(msg.toString());
        }

        t.setErrorListener(errorListener);
        t.setURIResolver(uriResolver);
        t.setParameter("versionParam", "2.0");
    } catch (TransformerConfigurationException tce) {
        log.error(tce);
        throw new TemplateException(tce.getMessage(), tce);
    }

    try {
        t.transform(xmlSource, new StreamResult(out));
    } catch (TransformerException te) {
        log.error(te.getMessageAndLocation());
        throw new TemplateException(te.getMessageAndLocation(), te);
    } catch (Exception e) {
        log.error("unexpected error " + e);
        throw new TemplateException(e.getMessage(), e);
    } finally {
        //Clear out any scripts that were created for this transform
        if (!scriptIds.isEmpty()) {
            XSLTProcessorMethodInvoker.removeMethods(scriptIds);
        }
    }

    if (errors.size() != 0) {
        final StringBuilder msg = new StringBuilder("errors encountered during transformation ... \n");
        for (TransformerException te : errors) {
            msg.append(te.getMessageAndLocation()).append("\n");
        }
        throw new TemplateException(msg.toString());
    }
}

From source file:org.alfresco.web.forms.XSLTRenderingEngine.java

public void render(final Map<QName, Object> model, final RenderingEngineTemplate ret, final Result result)
        throws IOException, RenderingEngine.RenderingException, SAXException {
    System.setProperty("org.apache.xalan.extensions.bsf.BSFManager", BSFManager.class.getName());
    Document xslTemplate = null;/*from w ww.j  a v a 2  s .c om*/
    try {
        xslTemplate = XMLUtil.parse(ret.getInputStream());
    } catch (final SAXException sax) {
        throw new RenderingEngine.RenderingException(sax);
    }
    this.addScripts(model, xslTemplate);
    this.addParameters(model, xslTemplate);

    final LinkedList<TransformerException> errors = new LinkedList<TransformerException>();
    final ErrorListener errorListener = new ErrorListener() {
        public void error(final TransformerException te) throws TransformerException {
            LOGGER.debug("error " + te.getMessageAndLocation());
            errors.add(te);
        }

        public void fatalError(final TransformerException te) throws TransformerException {
            LOGGER.debug("fatalError " + te.getMessageAndLocation());
            throw te;
        }

        public void warning(final TransformerException te) throws TransformerException {
            LOGGER.debug("warning " + te.getMessageAndLocation());
            errors.add(te);
        }
    };

    // create a uri resolver to resolve document() calls to the virtualized
    // web application
    final URIResolver uriResolver = new URIResolver() {
        public Source resolve(final String href, String base) throws TransformerException {
            LOGGER.debug("request to resolve href " + href + " using base " + base);
            final RenderingEngine.TemplateResourceResolver trr = (RenderingEngine.TemplateResourceResolver) model
                    .get(RenderingEngineTemplateImpl.PROP_RESOURCE_RESOLVER);

            InputStream in = null;
            try {
                in = trr.resolve(href);
            } catch (Exception e) {
                throw new TransformerException("unable to load " + href, e);
            }

            if (in == null) {
                throw new TransformerException("unable to resolve href " + href);
            }

            try {
                final Document d = XMLUtil.parse(in);
                if (LOGGER.isDebugEnabled())
                    LOGGER.debug("loaded " + XMLUtil.toString(d));
                return new DOMSource(d);
            } catch (Exception e) {
                throw new TransformerException("unable to load " + href, e);
            }
        }
    };

    Source xmlSource = this.getXMLSource(model);

    Transformer t = null;
    try {
        final TransformerFactory tf = TransformerFactory.newInstance();
        tf.setErrorListener(errorListener);
        tf.setURIResolver(uriResolver);

        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("xslTemplate: \n" + XMLUtil.toString(xslTemplate));
        }

        t = tf.newTransformer(new DOMSource(xslTemplate));

        if (errors.size() != 0) {
            final StringBuilder msg = new StringBuilder("errors encountered creating tranformer ... \n");
            for (TransformerException te : errors) {
                msg.append(te.getMessageAndLocation()).append("\n");
            }
            throw new RenderingEngine.RenderingException(msg.toString());
        }

        t.setErrorListener(errorListener);
        t.setURIResolver(uriResolver);
        t.setParameter("versionParam", "2.0");
    } catch (TransformerConfigurationException tce) {
        LOGGER.error(tce);
        throw new RenderingEngine.RenderingException(tce);
    }

    try {
        t.transform(xmlSource, result);
    } catch (TransformerException te) {
        LOGGER.error(te.getMessageAndLocation());
        throw new RenderingEngine.RenderingException(te);
    } catch (Exception e) {
        LOGGER.error("unexpected error " + e);
        throw new RenderingEngine.RenderingException(e);
    }

    if (errors.size() != 0) {
        final StringBuilder msg = new StringBuilder("errors encountered during transformation ... \n");
        for (TransformerException te : errors) {
            msg.append(te.getMessageAndLocation()).append("\n");
        }
        throw new RenderingEngine.RenderingException(msg.toString());
    }
}

From source file:org.apache.fop.tools.EventProducerCollectorTask.java

/**
 * Updates the translation file with new entries for newly found event producer methods.
 * @param modelFile the model file to use
 * @throws IOException if an I/O error occurs
 *//*from ww  w  .  j a v  a  2 s . co  m*/
protected void updateTranslationFile(File modelFile) throws IOException {
    try {
        boolean resultExists = getTranslationFile().exists();
        SAXTransformerFactory tFactory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();

        //Generate fresh generated translation file as template
        Source src = new StreamSource(modelFile.toURI().toURL().toExternalForm());
        StreamSource xslt1 = new StreamSource(getClass().getResourceAsStream(MODEL2TRANSLATION));
        if (xslt1.getInputStream() == null) {
            throw new FileNotFoundException(MODEL2TRANSLATION + " not found");
        }
        DOMResult domres = new DOMResult();
        Transformer transformer = tFactory.newTransformer(xslt1);
        transformer.transform(src, domres);
        final Node generated = domres.getNode();

        Node sourceDocument;
        if (resultExists) {
            //Load existing translation file into memory (because we overwrite it later)
            src = new StreamSource(getTranslationFile().toURI().toURL().toExternalForm());
            domres = new DOMResult();
            transformer = tFactory.newTransformer();
            transformer.transform(src, domres);
            sourceDocument = domres.getNode();
        } else {
            //Simply use generated as source document
            sourceDocument = generated;
        }

        //Generate translation file (with potentially new translations)
        src = new DOMSource(sourceDocument);

        //The following triggers a bug in older Xalan versions
        //Result res = new StreamResult(getTranslationFile());
        OutputStream out = new java.io.FileOutputStream(getTranslationFile());
        out = new java.io.BufferedOutputStream(out);
        Result res = new StreamResult(out);
        try {
            StreamSource xslt2 = new StreamSource(getClass().getResourceAsStream(MERGETRANSLATION));
            if (xslt2.getInputStream() == null) {
                throw new FileNotFoundException(MERGETRANSLATION + " not found");
            }
            transformer = tFactory.newTransformer(xslt2);
            transformer.setURIResolver(new URIResolver() {
                public Source resolve(String href, String base) throws TransformerException {
                    if ("my:dom".equals(href)) {
                        return new DOMSource(generated);
                    }
                    return null;
                }
            });
            if (resultExists) {
                transformer.setParameter("generated-url", "my:dom");
            }
            transformer.transform(src, res);
            if (resultExists) {
                log("Translation file updated: " + getTranslationFile());
            } else {
                log("Translation file generated: " + getTranslationFile());
            }
        } finally {
            IOUtils.closeQuietly(out);
        }
    } catch (TransformerException te) {
        throw new IOException(te.getMessage());
    }
}

From source file:org.codehaus.enunciate.modules.docs.DocumentationDeploymentModule.java

protected void doXSLT(URL xsltURL) throws IOException, EnunciateException {
    debug("Using stylesheet %s", xsltURL);
    StreamSource source = new StreamSource(xsltURL.openStream());

    try {//from w ww .  j a v  a2 s  . com
        Transformer transformer = SAXTransformerFactory.newInstance().newTransformer(source);
        transformer.setURIResolver(new URIResolver() {
            public Source resolve(String href, String base) throws TransformerException {
                return new StreamSource(new File(getGenerateDir(), href));
            }
        });
        transformer.setParameter("downloads-exists", new File(getGenerateDir(), "downloads.xml").exists());
        debug("Extra downloads exist: %b", transformer.getParameter("downloads-exists"));

        File docsXml = new File(getGenerateDir(), "docs.xml");
        File buildDir = getDocsBuildDir();
        buildDir.mkdirs();
        transformer.setParameter("output-dir", buildDir.getAbsolutePath() + File.separator);
        transformer.setParameter("api-relative-path", getRelativePathToRootDir());
        transformer.setParameter("index-page-name", getIndexPageName());
        transformer.setParameter("disable-rest-mountpoint", isDisableRestMountpoint());
        transformer.setParameter("group-rest-resources", getGroupRestResources());
        File indexPage = new File(buildDir, getIndexPageName());
        debug("Transforming %s to %s.", docsXml, indexPage);
        transformer.transform(new StreamSource(docsXml), new StreamResult(indexPage));
    } catch (TransformerException e) {
        throw new EnunciateException("Error during transformation of the documentation (stylesheet " + xsltURL
                + ", document " + new File(getGenerateDir(), "docs.xml") + ")", e);
    }
}

From source file:org.jaggeryjs.hostobjects.xslt.XSLTHostObject.java

private static URIResolver getUriResolver(final Context cx, final Scriptable scope,
        final Function uriResolver) {
    return new URIResolver() {
        @Override//from  ww  w. jav  a2  s . c o  m
        public Source resolve(String href, String base) throws TransformerException {
            Object obj = uriResolver.call(cx, scope, scope, new Object[] { base, href });
            if (obj instanceof XMLObject) {
                return new StreamSource(new StringReader(obj.toString()));
            } else if (obj instanceof String) {
                return new StreamSource(new StringReader((String) obj));
            } else {
                throw new TransformerException("Error while resolving the content for " + href);
            }
        }
    };
}

From source file:org.takes.rs.RsXSLTTest.java

/**
 * RsXSLT can convert XML to HTML./*from w w w.ja  va 2 s  . c  om*/
 * @throws IOException If some problem inside
 */
@Test
public void convertsXmlToHtml() throws IOException {
    final String xml = Joiner.on(' ').join("<?xml-stylesheet href='/a.xsl' type='text/xsl'?>",
            "<page><data></data></page>");
    final String xsl = Joiner.on(' ').join("<stylesheet xmlns='http://www.w3.org/1999/XSL/Transform'",
            " xmlns:x='http://www.w3.org/1999/xhtml' version='2.0'>", "<template match='/'>",
            "<x:html><x:div><value-of select='/page/data'/>",
            "</x:div><x:p>\u0443</x:p></x:html></template></stylesheet>");
    MatcherAssert.assertThat(IOUtils.toString(new RsXSLT(new RsText(xml), new URIResolver() {
        @Override
        public Source resolve(final String href, final String base) {
            return new StreamSource(new StringReader(xsl));
        }
    }).body()), XhtmlMatchers.hasXPath("//xhtml:p[.='\u0443']"));
}

From source file:org.takes.rs.RsXSLTTest.java

/**
 * RsXSLT can convert XML to plain text.
 * @throws IOException If some problem inside
 *///from  w  ww  . ja  v a2  s  .co m
@Test
public void convertsXmlToPlainText() throws IOException {
    final String xml = Joiner.on(' ').join("<?xml-stylesheet href='/x.xsl' type='text/xsl'?>",
            "<p><name>Jeffrey</name></p>");
    final String xsl = Joiner.on(' ').join("<stylesheet xmlns='http://www.w3.org/1999/XSL/Transform' ",
            " xmlns:x='http://www.w3.org/1999/xhtml' version='2.0' >",
            "<output method='text'/><template match='/'>",
            "Hey, <value-of select='/p/name'/>!</template></stylesheet>");
    MatcherAssert.assertThat(new RsPrint(new RsXSLT(new RsText(xml), new URIResolver() {
        @Override
        public Source resolve(final String href, final String base) {
            return new StreamSource(new StringReader(xsl));
        }
    })).print(), Matchers.endsWith("Hey, Jeffrey!"));
}

From source file:org.takes.rs.RsXSLTTest.java

/**
 * RsXSLT closes decorated Response body's InputStream when XML conversion
 * is done.//from w w  w .  ja v a2  s  .co  m
 * @throws Exception If some problem inside
 */
@Test
public void closesDecoratedResponseInputStream() throws Exception {
    final String xml = Joiner.on(' ').join("<?xml-stylesheet href='/b.xsl' type='text/xsl'?>",
            "<subject>World</subject>");
    final String xsl = Joiner.on(' ').join("<stylesheet xmlns='http://www.w3.org/1999/XSL/Transform'  ",
            " xmlns:x='http://www.w3.org/1999/xhtml' version='2.0'  >",
            "<output method='text'/><template match='/'> ",
            "Hello, <value-of select='/subject'/>!</template></stylesheet>");
    final StateAwareInputStream stream = new StateAwareInputStream(IOUtils.toInputStream(xml));
    MatcherAssert.assertThat(new RsPrint(new RsXSLT(new RsText(stream), new URIResolver() {
        @Override
        public Source resolve(final String href, final String base) {
            return new StreamSource(new StringReader(xsl));
        }
    })).print(), Matchers.endsWith("Hello, World!"));
    MatcherAssert.assertThat(stream.isClosed(), Matchers.is(true));
}

From source file:uk.ac.cam.caret.sakai.rwiki.component.service.impl.BaseFOPSerializer.java

/**
 * {@inheritDoc}/*from w  w  w  . ja  v  a 2s  . c  om*/
 */
public ContentHandler asContentHandler() throws IOException {
    if (fop == null) {
        InputStream stream = null;
        try {
            DefaultConfigurationBuilder cfgBuild = new DefaultConfigurationBuilder();
            stream = getClass().getResourceAsStream(configfile);
            Configuration cfg = cfgBuild.build(stream);
            final FopFactory ff = FopFactory.newInstance();
            ff.setUserConfig(cfg);
            FOUserAgent userAgent = ff.newFOUserAgent();

            userAgent.setURIResolver(new URIResolver() {

                public Source resolve(String href, String base) throws TransformerException {
                    Source source = null;
                    try {
                        logger.info("Resolving " + href + " from " + base);
                        HttpServletRequest request = XSLTEntityHandler.getCurrentRequest();
                        if (request != null && href.startsWith("/access")) {
                            // going direct into the ContentHandler Service

                            try {
                                String path = href.substring("/access".length());

                                Reference ref = EntityManager.newReference(path);
                                ContentResource resource = ContentHostingService.getResource(ref.getId());

                                return new StreamSource(resource.streamContent());
                            } catch (Exception ex) {
                                URI uri = new URI(base);
                                String content = uri.resolve(href).toString();
                                source = new StreamSource(content);
                            }
                        } else {
                            // use default resolver to resolve font
                            if (base == null) {
                                return ff.resolveURI(href, base);
                            }
                            URI uri = new URI(base);
                            String content = uri.resolve(href).toString();
                            source = new StreamSource(content);
                        }
                    } catch (Exception ex) {
                        throw new TransformerException("Failed to get " + href, ex);
                    }

                    return source;
                }

            });
            userAgent.setBaseURL(ServerConfigurationService.getString("serverUrl"));

            fop = ff.newFop(mimeType, userAgent, outputStream);

        } catch (Exception e) {
            logger.error("Failed to create Handler ", e);
            throw new IOException("Failed to create " + mimeType + " Serializer: " + e.getMessage());
        } finally {
            if (stream != null) {
                stream.close();
            }
        }
    }
    DefaultHandler dh;
    try {

        dh = fop.getDefaultHandler();

    } catch (FOPException e) {
        logger.error("Failed to get FOP Handler ", e);
        throw new RuntimeException("Failed to get FOP Handler ", e);
    }

    return dh;
}