List of usage examples for javax.xml.transform URIResolver URIResolver
URIResolver
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; }