List of usage examples for javax.xml.transform TransformerFactory setURIResolver
public abstract void setURIResolver(URIResolver resolver);
From source file:edu.unc.lib.dl.ingest.sip.METSPackageSIPProcessor.java
public METSPackageSIPProcessor() { try {//from w ww . j ava 2 s .c om _countObjectsXpath = XPath.newInstance(countObjectsXpath); _countObjectsXpath.addNamespace(METS_NS); } catch (JDOMException e) { log.error("Bad Configuration for Mets2FoxmlFilter", e); throw new IllegalArgumentException("Bad Configuration for Mets2FoxmlFilter", e); } Source mets2foxsrc = new StreamSource( METSPackageSIPProcessor.class.getResourceAsStream(stylesheetPackage + "base-model.xsl")); // requires a Saxon 8 transformer factory try { TransformerFactory factory = TransformerFactory.newInstance(); // set a Resolver that can look in the classpath factory.setURIResolver(new URIResolver() { public Source resolve(String href, String base) throws TransformerException { Source result = null; if (href.startsWith("/")) result = new StreamSource(METSPackageSIPProcessor.class.getResourceAsStream(href)); else result = new StreamSource( METSPackageSIPProcessor.class.getResourceAsStream(stylesheetPackage + href)); return result; } }); mets2fox = factory.newTemplates(mets2foxsrc); } catch (TransformerFactoryConfigurationError e) { log.error("Error setting up transformer factory.", e); throw new Error("Error setting up transformer factory", e); } catch (TransformerConfigurationException e) { log.error("Error setting up transformer.", e); throw new Error("Error setting up transformer", e); } }
From source file:de.interactive_instruments.ShapeChange.Target.FeatureCatalogue.XsltWriter.java
public void xsltWrite(File transformationSource, URI xsltMainFileUri, File transformationTarget) { try {//from w ww . j ava 2s . com // Set up input and output files InputStream stream = null; if (xsltMainFileUri.getScheme().startsWith("http")) { URL url = xsltMainFileUri.toURL(); URLConnection urlConnection = url.openConnection(); stream = urlConnection.getInputStream(); } else { File xsl = new File(xsltMainFileUri); // FeatureCatalogue.java already checked that file exists stream = new FileInputStream(xsl); } Source xsltSource = new StreamSource(stream); xsltSource.setSystemId(xsltMainFileUri.toString()); Source xmlSource = new StreamSource(transformationSource); Result res = new StreamResult(transformationTarget); // create an instance of TransformerFactory if (xslTransformerFactory != null) { // use TransformerFactory specified in configuration System.setProperty("javax.xml.transform.TransformerFactory", xslTransformerFactory); } else { // use TransformerFactory determined by system } TransformerFactory transFact = TransformerFactory.newInstance(); /* * Set URI resolver for transformation, configured with standard * mappings (e.g. for the localization files) and possibly other * mappings. */ transFact.setURIResolver(new XsltUriResolver(hrefMappings)); Transformer trans = transFact.newTransformer(xsltSource); /* * Specify any standard transformation parameters (e.g. for * localization). */ for (String key : transformationParameters.keySet()) { trans.setParameter(key, transformationParameters.get(key)); } /* Execute the transformation. */ trans.transform(xmlSource, res); } catch (Exception e) { String m = e.getMessage(); if (m != null) { if (result != null) { result.addError(m); } else { System.err.println(m); } } else { String msg = "Exception occurred while processing the XSL transformation."; if (result != null) { result.addError(msg); } else { System.err.println(msg); } } } }
From source file:com.predic8.membrane.core.interceptor.schemavalidation.SchematronValidator.java
public SchematronValidator(ResolverMap resourceResolver, String schematron, ValidatorInterceptor.FailureHandler failureHandler, Router router, BeanFactory beanFactory) throws Exception { this.failureHandler = failureHandler; //works as standalone "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl" TransformerFactory fac;// ww w . j a va 2s. co m try { fac = beanFactory.getBean("transformerFactory", TransformerFactory.class); } catch (NoSuchBeanDefinitionException e) { throw new RuntimeException( "Please define a bean called 'transformerFactory' in monitor-beans.xml, e.g. with " + "<spring:bean id=\"transformerFactory\" class=\"com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl\" />", e); } fac.setURIResolver(new URIResolver() { @Override public Source resolve(String href, String base) throws TransformerException { return new StreamSource(SchematronValidator.class.getResourceAsStream(href)); } }); Transformer t = fac.newTransformer( new StreamSource(SchematronValidator.class.getResourceAsStream("conformance1-5.xsl"))); // transform schematron-XML into XSLT DOMResult r = new DOMResult(); t.transform(new StreamSource(router.getResolverMap().resolve(schematron)), r); // build XSLT transformers fac.setURIResolver(null); int concurrency = Runtime.getRuntime().availableProcessors() * 2; transformers = new ArrayBlockingQueue<Transformer>(concurrency); for (int i = 0; i < concurrency; i++) { Transformer transformer = fac.newTransformer(new DOMSource(r.getNode())); transformer.setErrorListener(new NullErrorListener()); // silence console logging transformers.put(transformer); } xmlInputFactory = XMLInputFactory.newInstance(); xmlInputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, false); xmlInputFactory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); }
From source file:net.sf.joost.plugins.traxfilter.THResolver.java
private void setupTransformerFactory(TransformerFactory factory, ErrorListener errorListener, URIResolver uriResolver) { if (errorListener != null) factory.setErrorListener(errorListener); if (uriResolver != null) factory.setURIResolver(uriResolver); }
From source file:org.alfresco.repo.template.XSLTProcessor.java
/** * @param templateSource//from w w w . ja va 2s . c om * @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 ww w . j a v a 2 s. com 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.ambraproject.service.xml.XMLServiceImpl.java
/** * Initialization method called by Spring. * * @throws org.ambraproject.ApplicationException On Template creation Exceptions. */// ww w . jav a2 s. co m public void init() throws ApplicationException { // set JAXP properties System.getProperties().putAll(xmlFactoryProperty); // Create a document builder factory and set the defaults factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); factory.setValidating(false); // set the Templates final TransformerFactory tFactory = TransformerFactory.newInstance(); //Because we have XSL sheets with import statements. I override the URI resolver //here so the factory knows to look inside the jar files for these files tFactory.setURIResolver(new XMLServiceURIResolver()); try { log.debug("Loading XSL: {}", xslDefaultTemplate); translet = tFactory.newTemplates(getResourceAsStreamSource(xslDefaultTemplate)); } catch (TransformerConfigurationException ex) { throw new ApplicationException(ex.getMessage(), ex); } catch (IOException ex) { throw new ApplicationException(ex.getMessage(), ex); } }
From source file:org.ambraproject.service.xml.XMLServiceImpl.java
/** * Get a translet, compiled stylesheet, for the xslTemplate. If the doc is null * use the default template. If the doc is not null then get the DTD version. * IF the DTD version does not exist use the default template else use the * template associated with that version. * * @param doc the dtd version of document * @return Translet for the xslTemplate. * @throws javax.xml.transform.TransformerException TransformerException. *//*ww w. j a v a 2s .c o m*/ private Transformer getTranslet(Document doc) throws TransformerException, URISyntaxException, IOException { Transformer transformer; // key is "" if the Attribute does not exist String key = (doc == null) ? "default" : doc.getDocumentElement().getAttribute("dtd-version").trim(); if ((!xslTemplateMap.containsKey(key)) || (key.equalsIgnoreCase(""))) { transformer = this.translet.newTransformer(); } else { Templates translet; String templateName = xslTemplateMap.get(key); // set the Templates final TransformerFactory tFactory = TransformerFactory.newInstance(); //Because we have XSL sheets with import statements. I override the URI resolver //here so the factory knows to look inside the jar files for these files tFactory.setURIResolver(new XMLServiceURIResolver()); //TODO: (performace) We should cache the translets when this class is initialized. We don't need //to parse the XSLs for every transform. translet = tFactory.newTemplates(getResourceAsStreamSource(templateName)); transformer = translet.newTransformer(); } transformer.setParameter("pubAppContext", configuration.getString("ambra.platform.appContext", "")); return transformer; }
From source file:org.apache.fop.cli.InputHandler.java
/** * Transforms the input document to the input format expected by FOP using XSLT. * @param result the Result object where the result of the XSL transformation is sent to * @throws FOPException in case of an error during processing *//*from w w w . j a va2s . com*/ protected void transformTo(Result result) throws FOPException { try { // Setup XSLT TransformerFactory factory = TransformerFactory.newInstance(); if (uriResolver != null) { factory.setURIResolver(uriResolver); } factory.setErrorListener(this); Transformer transformer; Source xsltSource = createXSLTSource(); if (xsltSource == null) { // FO Input transformer = factory.newTransformer(); } else { // XML/XSLT input transformer = factory.newTransformer(xsltSource); // Set the value of parameters, if any, defined for stylesheet if (xsltParams != null) { for (int i = 0; i < xsltParams.size(); i += 2) { transformer.setParameter((String) xsltParams.elementAt(i), (String) xsltParams.elementAt(i + 1)); } } } transformer.setErrorListener(this); // Create a SAXSource from the input Source file Source src = createMainSource(); // Start XSLT transformation and FOP processing transformer.transform(src, result); } catch (Exception e) { throw new FOPException(e); } }
From source file:org.apache.solr.handler.dataimport.XPathEntityProcessor.java
private void initXpathReader(VariableResolver resolver) { reinitXPathReader = false;/*from www . ja va 2 s . co m*/ useSolrAddXml = Boolean.parseBoolean(context.getEntityAttribute(USE_SOLR_ADD_SCHEMA)); streamRows = Boolean.parseBoolean(context.getEntityAttribute(STREAM)); if (context.getResolvedEntityAttribute("batchSize") != null) { blockingQueueSize = Integer.parseInt(context.getEntityAttribute("batchSize")); } if (context.getResolvedEntityAttribute("readTimeOut") != null) { blockingQueueTimeOut = Integer.parseInt(context.getEntityAttribute("readTimeOut")); } String xslt = context.getEntityAttribute(XSL); if (xslt != null) { xslt = context.replaceTokens(xslt); try { // create an instance of TransformerFactory TransformerFactory transFact = TransformerFactory.newInstance(); final SolrCore core = context.getSolrCore(); final StreamSource xsltSource; if (core != null) { final ResourceLoader loader = core.getResourceLoader(); transFact.setURIResolver(new SystemIdResolver(loader).asURIResolver()); xsltSource = new StreamSource(loader.openResource(xslt), SystemIdResolver.createSystemIdFromResourceName(xslt)); } else { // fallback for tests xsltSource = new StreamSource(xslt); } transFact.setErrorListener(xmllog); try { xslTransformer = transFact.newTransformer(xsltSource); } finally { // some XML parsers are broken and don't close the byte stream (but they should according to spec) IOUtils.closeQuietly(xsltSource.getInputStream()); } LOG.info("Using xslTransformer: " + xslTransformer.getClass().getName()); } catch (Exception e) { throw new DataImportHandlerException(SEVERE, "Error initializing XSL ", e); } } if (useSolrAddXml) { // Support solr add documents xpathReader = new XPathRecordReader("/add/doc"); xpathReader.addField("name", "/add/doc/field/@name", true); xpathReader.addField("value", "/add/doc/field", true); } else { String forEachXpath = context.getResolvedEntityAttribute(FOR_EACH); if (forEachXpath == null) throw new DataImportHandlerException(SEVERE, "Entity : " + context.getEntityAttribute("name") + " must have a 'forEach' attribute"); if (forEachXpath.equals(context.getEntityAttribute(FOR_EACH))) reinitXPathReader = true; try { xpathReader = new XPathRecordReader(forEachXpath); for (Map<String, String> field : context.getAllEntityFields()) { if (field.get(XPATH) == null) continue; int flags = 0; if ("true".equals(field.get("flatten"))) { flags = XPathRecordReader.FLATTEN; } String xpath = field.get(XPATH); xpath = context.replaceTokens(xpath); //!xpath.equals(field.get(XPATH) means the field xpath has a template //in that case ensure that the XPathRecordReader is reinitialized //for each xml if (!xpath.equals(field.get(XPATH)) && !context.isRootEntity()) reinitXPathReader = true; xpathReader.addField(field.get(DataImporter.COLUMN), xpath, Boolean.parseBoolean(field.get(DataImporter.MULTI_VALUED)), flags); } } catch (RuntimeException e) { throw new DataImportHandlerException(SEVERE, "Exception while reading xpaths for fields", e); } } String url = context.getEntityAttribute(URL); List<String> l = url == null ? Collections.EMPTY_LIST : resolver.getVariables(url); for (String s : l) { if (s.startsWith(entityName + ".")) { if (placeHolderVariables == null) placeHolderVariables = new ArrayList<>(); placeHolderVariables.add(s.substring(entityName.length() + 1)); } } for (Map<String, String> fld : context.getAllEntityFields()) { if (fld.get(COMMON_FIELD) != null && "true".equals(fld.get(COMMON_FIELD))) { if (commonFields == null) commonFields = new ArrayList<>(); commonFields.add(fld.get(DataImporter.COLUMN)); } } }