List of usage examples for javax.xml.transform Templates newTransformer
Transformer newTransformer() throws TransformerConfigurationException;
From source file:org.apache.synapse.mediators.transform.XSLTMediator.java
/** * Perform actual XSLT transformation// www. j a v a 2 s . c om * @param synCtx current message * @param synLog the logger to be used */ private void performXSLT(MessageContext synCtx, SynapseLog synLog) { OMNode sourceNode = source.selectOMNode(synCtx, synLog); boolean isSoapEnvelope = (sourceNode == synCtx.getEnvelope()); boolean isSoapBody = (sourceNode == synCtx.getEnvelope().getBody()); boolean isSoapHeader = (sourceNode == synCtx.getEnvelope().getHeader()); // Derive actual key from message context String generatedXsltKey = xsltKey.evaluateValue(synCtx); // get templates from generatedXsltKey Templates cachedTemplates = null; if (synLog.isTraceTraceEnabled()) { synLog.traceTrace("Transformation source : " + sourceNode.toString()); } // determine if it is needed to create or create the template if (isCreationOrRecreationRequired(synCtx)) { // many threads can see this and come here for acquiring the lock synchronized (transformerLock) { // only first thread should create the template if (isCreationOrRecreationRequired(synCtx)) { cachedTemplates = createTemplate(synCtx, synLog, generatedXsltKey); } else { cachedTemplates = cachedTemplatesMap.get(generatedXsltKey); } } } else { //If already cached template then load it from cachedTemplatesMap synchronized (transformerLock) { cachedTemplates = cachedTemplatesMap.get(generatedXsltKey); } } try { // perform transformation Transformer transformer = null; try { transformer = cachedTemplates.newTransformer(); } catch (NullPointerException ex) { handleException("Unable to create Transformer using cached template", ex, synCtx); } if (!properties.isEmpty()) { // set the parameters which will pass to the Transformation applyProperties(transformer, synCtx, synLog); } transformer.setErrorListener(new ErrorListenerImpl(synLog, XSLT_TRANSFORMATION_ACTIVITY)); String outputMethod = transformer.getOutputProperty(OutputKeys.METHOD); String encoding = transformer.getOutputProperty(OutputKeys.ENCODING); if (synLog.isTraceOrDebugEnabled()) { synLog.traceOrDebug("output method: " + outputMethod + "; encoding: " + encoding); } ResultBuilderFactory.Output output; if ("text".equals(outputMethod)) { synLog.traceOrDebug("Processing non SOAP/XML (text) transformation result"); output = ResultBuilderFactory.Output.TEXT; } else if (isSoapEnvelope) { output = ResultBuilderFactory.Output.SOAP_ENVELOPE; } else { output = ResultBuilderFactory.Output.ELEMENT; } SynapseEnvironment synEnv = synCtx.getEnvironment(); ResultBuilder resultBuilder = resultBuilderFactory.createResultBuilder(synEnv, output); SourceBuilder sourceBuilder = sourceBuilderFactory.createSourceBuilder(synEnv); if (synLog.isTraceOrDebugEnabled()) { synLog.traceOrDebug("Using " + sourceBuilder.getClass().getName()); synLog.traceOrDebug("Using " + resultBuilder.getClass().getName()); } try { transformer.transform(sourceBuilder.getSource((OMElement) sourceNode), resultBuilder.getResult()); } finally { sourceBuilder.release(); } synLog.traceOrDebug("Transformation completed - processing result"); /** * If user have set transform.xslt.result.disableBuild property to true, we do not build the message to * OMElement, */ if (targetPropertyName != null && resultBuilder instanceof StreamResultBuilder && synCtx.getProperty(TRANSFORM_XSLT_RESULT_DISABLE_BUILD) != null && synCtx.getProperty(TRANSFORM_XSLT_RESULT_DISABLE_BUILD) instanceof String && "true".equalsIgnoreCase((String) synCtx.getProperty(TRANSFORM_XSLT_RESULT_DISABLE_BUILD))) { // add result XML string as a message context property to the message if (synLog.isTraceOrDebugEnabled()) { synLog.traceOrDebug("Adding result string as message context property : " + targetPropertyName); } synCtx.setProperty(targetPropertyName, ((StreamResultBuilder) resultBuilder).getResultAsString()); return; } // get the result OMElement OMElement result = null; try { result = resultBuilder.getNode(encoding == null ? null : Charset.forName(encoding)); } catch (Exception e) { throw new SynapseException("Unable to create an OMElement using XSLT result ", e); } if (synLog.isTraceTraceEnabled()) { synLog.traceTrace("Transformation result : " + result.toString()); } if (targetPropertyName != null) { // add result XML as a message context property to the message if (synLog.isTraceOrDebugEnabled()) { synLog.traceOrDebug("Adding result as message context property : " + targetPropertyName); } synCtx.setProperty(targetPropertyName, result); } else { if (synLog.isTraceOrDebugEnabled()) { synLog.traceOrDebug( "Replace " + (isSoapEnvelope ? "SOAP envelope" : isSoapBody ? "SOAP body" : "node") + " with result"); } if (isSoapEnvelope) { try { synCtx.setEnvelope((SOAPEnvelope) result); } catch (AxisFault ex) { handleException("Unable to replace SOAP envelope with result", ex, synCtx); } } else if (isSoapBody) { for (Iterator itr = synCtx.getEnvelope().getBody().getChildElements(); itr.hasNext();) { OMElement child = (OMElement) itr.next(); child.detach(); } for (Iterator itr = result.getChildElements(); itr.hasNext();) { OMElement child = (OMElement) itr.next(); synCtx.getEnvelope().getBody().addChild(child); } } else if (isSoapHeader) { for (Iterator itr = synCtx.getEnvelope().getHeader().getChildElements(); itr.hasNext();) { OMElement child = (OMElement) itr.next(); child.detach(); } for (Iterator itr = result.getChildElements(); itr.hasNext();) { OMElement child = (OMElement) itr.next(); synCtx.getEnvelope().getHeader().addChild(child); } } else { sourceNode.insertSiblingAfter(result); sourceNode.detach(); } } } catch (TransformerException e) { handleException("Error performing XSLT transformation using : " + xsltKey, e, synCtx); } }
From source file:org.dd4t.core.util.XSLTransformer.java
private Transformer getTransformer(String resource) throws TransformerConfigurationException { Transformer trans = null;// w w w . j a va 2 s .co m Templates temp = null; // first, lets get the template if (CACHE.containsKey(resource)) { temp = CACHE.get(resource); } else { InputStream stream = null; try { stream = getClass().getResourceAsStream(resource); if (null == stream) { throw new TransformerConfigurationException( "Resource '" + resource + "' could not be loaded. "); } StreamSource source = new StreamSource(stream); // instantiate a transformer TransformerFactory transformerFactory = TransformerFactory.newInstance(); temp = transformerFactory.newTemplates(source); CACHE.put(resource, temp); } finally { IOUtils.closeQuietly(stream); } } trans = temp.newTransformer(); return trans; }
From source file:org.directwebremoting.drapgen.generate.gi.GiType.java
/** * @param templateDir The base directory for the templates * @param defaultTemplate The extra path (from templateDir) to the default * *//*from ww w . ja v a 2s .c o m*/ public void transform(String templateDir, String defaultTemplate) { try { File templateFile = new File(templateDir + xmlClassName.replaceFirst("\\.xml$", ".xslt")); if (!templateFile.canRead()) { templateFile = new File(templateDir + defaultTemplate); } // Read the XSLT Source xslSource = new StreamSource(templateFile); Templates template = templatesCache.get(templateFile); if (template == null) { template = factory.newTemplates(xslSource); templatesCache.put(templateFile, template); } Source xmlSource = new DOMSource(document); Transformer javaTransformer = template.newTransformer(); javaTransformer.transform(xmlSource, new StreamResult(output)); } catch (TransformerException ex) { SourceLocator locator = ex.getLocator(); log.fatal("Failed to transform", ex); log.warn("Line: " + locator.getLineNumber() + ", Column: " + locator.getColumnNumber()); log.warn("PublicId: " + locator.getPublicId()); log.warn("SystemId: " + locator.getSystemId()); } catch (Exception ex) { log.warn("Processing Error for " + xmlFile.getAbsolutePath(), ex); } }
From source file:org.docx4j.XmlUtils.java
/** * /*from w w w . j a va 2 s . com*/ * Transform an input document using XSLT * * @param doc * @param xslt * @param transformParameters * @param result * @throws Docx4JException In case serious transformation errors occur */ public static void transform(javax.xml.transform.Source source, javax.xml.transform.Templates template, Map<String, Object> transformParameters, javax.xml.transform.Result result) throws Docx4JException { if (source == null) { Throwable t = new Throwable(); throw new Docx4JException("Null Source doc", t); } // Use the template to create a transformer // A Transformer may not be used in multiple threads running concurrently. // Different Transformers may be used concurrently by different threads. // A Transformer may be used multiple times. Parameters and output properties // are preserved across transformations. javax.xml.transform.Transformer xformer; try { xformer = template.newTransformer(); } catch (TransformerConfigurationException e) { throw new Docx4JException("The Transformer is ill-configured", e); } log.info("Using " + xformer.getClass().getName()); if (xformer.getClass().getName().equals("org.apache.xalan.transformer.TransformerImpl")) { if (Docx4jProperties.getProperty("docx4j.xalan.XALANJ-2419.workaround", false)) { // Use our patched serializer, which fixes Unicode astral character // issue. See https://issues.apache.org/jira/browse/XALANJ-2419 log.info("Working around https://issues.apache.org/jira/browse/XALANJ-2419"); Properties p = xformer.getOutputProperties(); String method = p.getProperty("method"); System.out.println("method: " + method); if (method == null || method.equals("xml")) { ((org.apache.xalan.transformer.TransformerImpl) xformer).setOutputProperty( S_KEY_CONTENT_HANDLER, "org.docx4j.org.apache.xml.serializer.ToXMLStream"); } else if (method.equals("html")) { ((org.apache.xalan.transformer.TransformerImpl) xformer).setOutputProperty( S_KEY_CONTENT_HANDLER, "org.docx4j.org.apache.xml.serializer.ToHTMLStream"); } else if (method.equals("text")) { ((org.apache.xalan.transformer.TransformerImpl) xformer).setOutputProperty( S_KEY_CONTENT_HANDLER, "org.docx4j.org.apache.xml.serializer.ToTextStream"); } else { log.warn("fallback for method: " + method); ((org.apache.xalan.transformer.TransformerImpl) xformer).setOutputProperty( S_KEY_CONTENT_HANDLER, "org.docx4j.org.apache.xml.serializer.ToUnknownStream"); } /* That wasn't quite enough: * at org.docx4j.org.apache.xml.serializer.ToXMLStream.startDocumentInternal(ToXMLStream.java:143) at org.docx4j.org.apache.xml.serializer.SerializerBase.startDocument(SerializerBase.java:1190) at org.apache.xml.serializer.ToSAXHandler.startDocumentInternal(ToSAXHandler.java:97) at org.apache.xml.serializer.ToSAXHandler.flushPending(ToSAXHandler.java:273) at org.apache.xml.serializer.ToXMLSAXHandler.startPrefixMapping(ToXMLSAXHandler.java:350) at org.apache.xml.serializer.ToXMLSAXHandler.startPrefixMapping(ToXMLSAXHandler.java:320) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1317) * * (TransformerImpl's createSerializationHandler makes a new org.apache.xml.serializer.ToXMLSAXHandler.ToXMLSAXHandler * and that's hard coded.) * * But it seems to be enough now... */ } } else { log.error("Detected " + xformer.getClass().getName() + ", but require org.apache.xalan.transformer.TransformerImpl. " + "Ensure Xalan 2.7.x is on your classpath!"); } LoggingErrorListener errorListener = new LoggingErrorListener(false); xformer.setErrorListener(errorListener); if (transformParameters != null) { Iterator parameterIterator = transformParameters.entrySet().iterator(); while (parameterIterator.hasNext()) { Map.Entry pairs = (Map.Entry) parameterIterator.next(); if (pairs.getKey() == null) { log.info("Skipped null key"); // pairs = (Map.Entry)parameterIterator.next(); continue; } if (pairs.getKey().equals("customXsltTemplates")) continue; if (pairs.getValue() == null) { log.warn("parameter '" + pairs.getKey() + "' was null."); } else { xformer.setParameter((String) pairs.getKey(), pairs.getValue()); } } } /* SUPER DEBUGGING // http://xml.apache.org/xalan-j/usagepatterns.html#debugging // debugging // Set up a PrintTraceListener object to print to a file. java.io.FileWriter fw = new java.io.FileWriter("/tmp/xslt-events" + xsltCount++ + ".log"); java.io.PrintWriter pw = new java.io.PrintWriter(fw); PrintTraceListener ptl = new PrintTraceListener(pw); // Print information as each node is 'executed' in the stylesheet. ptl.m_traceElements = true; // Print information after each result-tree generation event. ptl.m_traceGeneration = true; // Print information after each selection event. ptl.m_traceSelection = true; // Print information whenever a template is invoked. ptl.m_traceTemplates = true; // Print information whenever an extension is called. ptl.m_traceExtension = true; TransformerImpl transformerImpl = (TransformerImpl)xformer; // Register the TraceListener with the TraceManager associated // with the TransformerImpl. TraceManager trMgr = transformerImpl.getTraceManager(); trMgr.addTraceListener(ptl); */ // DEBUGGING // use the identity transform if you want to send wordDocument; // otherwise you'll get the XHTML // javax.xml.transform.Transformer xformer = tfactory.newTransformer(); try { xformer.transform(source, result); } catch (TransformerException e) { throw new Docx4JException("Cannot perform the transformation", e); } finally { //pw.flush(); } }
From source file:org.easyrec.util.core.Web.java
/** * This function returns a processed HTML Page from a given XML * transformed with an XSL.// w w w . j av a2 s . co m * * @param xmlUrl String * @param xslUrl String * @return String * @throws Exception Exception */ @SuppressWarnings({ "UnusedDeclaration" }) public static String transformXML(String xmlUrl, String xslUrl) throws Exception { String sHTML; try { TransformerFactory factory = TransformerFactory.newInstance(); Templates sourceTemplate = factory.newTemplates(new StreamSource(xslUrl)); Transformer sourceTransformer = sourceTemplate.newTransformer(); URI uri = new URI("http", xmlUrl.replace("http:", ""), null); Source source = new StreamSource(uri.toURL().toString()); StringWriter writer = new StringWriter(); Result localResult = new StreamResult(writer); sourceTransformer.transform(source, localResult); sHTML = writer.toString(); } catch (Exception e) { logger.warn("An error occurred!", e); throw new Exception(); } return sHTML; }
From source file:org.easyrec.utils.Web.java
/** * This function returns a processed HTML Page from a given XML * transformed with an XSL.// w ww . j a v a 2 s .c om * * @param xmlUrl String * @param xslUrl String * @return String * @throws Exception Exception */ @SuppressWarnings({ "UnusedDeclaration" }) public static String transformXML(String xmlUrl, String xslUrl) throws Exception { String sHTML; try { TransformerFactory factory = TransformerFactory.newInstance(); Templates sourceTemplate = factory.newTemplates(new StreamSource(xslUrl)); Transformer sourceTransformer = sourceTemplate.newTransformer(); URI uri = new URI("http", xmlUrl.replace("http:", ""), null); Source source = new StreamSource(uri.toURL().toString()); StringWriter writer = new StringWriter(); Result localResult = new StreamResult(writer); sourceTransformer.transform(source, localResult); sHTML = writer.toString(); } catch (Exception e) { throw new Exception(); } return sHTML; }
From source file:org.geoserver.wfs.xslt.config.TransformRepository.java
/** * Returns the XSLT transformer for a specific {@link TransformInfo} * /*from w ww . j av a2 s . c o m*/ * @param name * @return */ public Transformer getTransformer(TransformInfo info) throws IOException { File txFile = getTransformFile(info); Templates templates = transformCache.getItem(txFile); if (templates != null) { try { return templates.newTransformer(); } catch (TransformerConfigurationException e) { throw new WFSException("Failed to load XSLT transformation " + info.getXslt(), e); } } else { throw new IOException("No XLST found at " + txFile.getAbsolutePath()); } }
From source file:org.ikasan.filetransfer.xml.transform.DefaultXSLTransformer.java
/** * Compiles the specified XSL stylesheet into translets and * registers them using the internal mapping table. * * @param name - the unique name being mapped to the source instance * holding XSL stylesheet in the internal * mapping table.//from w w w . j a v a 2 s. com * @param xslSource - the source object that holds an XSL stylesheet URI, * input stream, etc. * @param useXSLTC - the flag indicating whether to use XSLTC. * @throws TransformerConfigurationException */ private synchronized void registerTemplates(String name, Source xslSource, boolean useXSLTC) throws TransformerConfigurationException { if (name == null) throw new NullPointerException("Translet reference name can't be null"); if (name.trim().length() == 0) throw new IllegalArgumentException("Translet reference name can't be empty"); if (xslSource == null) throw new NullPointerException("XSL stylesheet source can't be null"); if (useXSLTC == true) { // Try to get the translet instance associated with // the stylesheet name from the translet mapping table logger.debug("Trying to get translet for [" + name + "]."); Templates translet = translets.get(name); // First time, compile the stylesheet to create a new translet // Add it to the internal mapping table for the later use if (translet == null) { logger.debug("First time, compiling stylesheet..."); logger.debug("XSL stylesheet URI =[" + xslSource.getSystemId() + "]."); translet = this.newTemplates(xslSource); translets.put(new String(name), translet); logger.debug("Name:[" + name + "] => XSLTC:[" + translet + "]."); } else { // Log it to ensure we are using the same translet logger.debug("Name:[" + name + "] => XSLTC:[" + translet + "]."); } // Create a new transformation context for this translet object // Set it as current Transformer instance this.transformer = translet.newTransformer(); } else { // Get a new TransformerFactory instance TransformerFactory tFactory = this.newTransformerFactory(); this.transformer = tFactory.newTransformer(xslSource); } // Also clear all parameters just in case logger.debug("Got a new Transformer."); this.transformer.clearParameters(); }
From source file:org.jahia.services.importexport.ImportExportBaseService.java
private Transformer getTransformer(String xsl) throws TransformerConfigurationException { Templates templates = xsltTemplates.get(xsl); if (templates == null) { templates = new TransformerFactoryImpl().newTemplates(new StreamSource(new File(xsl))); xsltTemplates.put(xsl, templates); }// w ww .j a va2s. c o m return templates.newTransformer(); }
From source file:org.kuali.rice.kew.mail.service.impl.StyleableEmailContentServiceImpl.java
protected static String transform(Templates style, Document doc) { StringWriter writer = new StringWriter(); StreamResult result = new StreamResult(writer); try {/* ww w . j av a 2 s. co m*/ style.newTransformer().transform(new DOMSource(doc), result); return writer.toString(); } catch (TransformerException te) { String message = "Error transforming DOM"; LOG.error(message, te); throw new WorkflowRuntimeException(message, te); } }