Example usage for javax.xml.transform Transformer setErrorListener

List of usage examples for javax.xml.transform Transformer setErrorListener

Introduction

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

Prototype

public abstract void setErrorListener(ErrorListener listener) throws IllegalArgumentException;

Source Link

Document

Set the error event listener in effect for the transformation.

Usage

From source file:nl.nn.adapterframework.util.TransformerPool.java

protected synchronized Transformer createTransformer() throws TransformerConfigurationException {
    Transformer t = templates.newTransformer();
    if (t == null) {
        throw new TransformerConfigurationException("cannot instantiate transformer");
    }/*w  w w  .  ja  va 2 s  .c  om*/
    t.setErrorListener(new TransformerErrorListener());
    return t;
}

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

/**
 * @param templateSource/* w  ww  .  j  av  a 2  s.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;// ww w.j av a2s .  c  o m
    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.axis2.util.XMLPrettyPrinter.java

/**
 * Pretty prints contents of the xml file.
 *
 * @param file// w w w  .  j  a  v  a2  s.c  om
 */
public static void prettify(final File file) {
    InputStream inputStream = null;
    FileOutputStream outputStream = null;
    byte[] byteArray = null;
    try {
        FileInputStream fin = new FileInputStream(file);
        byteArray = IOUtils.getStreamAsByteArray(fin);
        fin.close();
        inputStream = new ByteArrayInputStream(byteArray);
        outputStream = new FileOutputStream(file);

        Source stylesheetSource = new StreamSource(new ByteArrayInputStream(prettyPrintStylesheet.getBytes()));
        Source xmlSource = new StreamSource(inputStream);

        TransformerFactory tf = TransformerFactory.newInstance();
        Templates templates = tf.newTemplates(stylesheetSource);
        Transformer transformer = templates.newTransformer();
        transformer.setErrorListener(new ErrorListener() {
            public void warning(TransformerException exception) throws TransformerException {
                log.warn("Exception occurred while trying to pretty print file " + file, exception);
            }

            public void error(TransformerException exception) throws TransformerException {
                log.error("Exception occurred while trying to pretty print file " + file, exception);
            }

            public void fatalError(TransformerException exception) throws TransformerException {
                log.error("Exception occurred while trying to pretty print file " + file, exception);
            }
        });
        transformer.transform(xmlSource, new StreamResult(outputStream));

        inputStream.close();
        outputStream.close();
        log.debug("Pretty printed file : " + file);
    } catch (Throwable t) {
        log.debug("Exception occurred while trying to pretty print file " + file, t);

        /* if outputStream is already created, close them, because we are going reassign
         * different value to that. It will leak the file handle (specially in windows, since
         * deleting is going to be an issue)
         */
        if (outputStream != null) {
            try {
                outputStream.close();
            } catch (IOException e) {
                log.debug(e.getMessage(), e);
            }
        }
        try {
            if (byteArray != null) {
                outputStream = new FileOutputStream(file);
                outputStream.write(byteArray);
            }
        } catch (IOException e) {
            log.debug(e.getMessage(), e);
        }
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                log.debug(e.getMessage(), e);
            }
        }
        if (outputStream != null) {
            try {
                outputStream.close();
            } catch (IOException e) {
                log.debug(e.getMessage(), e);
            }
        }
    }
}

From source file:org.apache.fop.area.AreaTreeParser.java

/**
 * Parses an intermediate file (area tree XML) into an AreaTreeModel instance by adding
 * pages to it./*from w  ww .j  a  v a  2  s.  c  o  m*/
 * @param src the Source instance pointing to the intermediate file
 * @param treeModel the AreaTreeModel that the parsed pages are added to
 * @param userAgent the user agent
 * @throws TransformerException if an error occurs while parsing the area tree XML
 */
public void parse(Source src, AreaTreeModel treeModel, FOUserAgent userAgent) throws TransformerException {
    Transformer transformer = tFactory.newTransformer();
    transformer.setErrorListener(new DefaultErrorListener(log));

    SAXResult res = new SAXResult(getContentHandler(treeModel, userAgent));

    transformer.transform(src, res);
}

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 ww  w . j  a  v  a 2  s.  c  o m*/
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.fop.events.model.EventModelParser.java

/**
 * Parses an event model file into an EventModel instance.
 * @param src the Source instance pointing to the XML file
 * @return the created event model structure
 * @throws TransformerException if an error occurs while parsing the XML file
 *//* ww  w  .j  a v  a  2 s  .  c  o m*/
public static EventModel parse(Source src) throws TransformerException {
    Transformer transformer = tFactory.newTransformer();
    transformer.setErrorListener(new DefaultErrorListener(LOG));

    EventModel model = new EventModel();
    SAXResult res = new SAXResult(getContentHandler(model));

    transformer.transform(src, res);
    return model;
}

From source file:org.apache.fop.intermediate.AbstractIntermediateTest.java

/**
 * Sets an error listener which doesn't swallow errors like Xalan's default one.
 * @param transformer the transformer to set the error listener on
 *///from   ww w.ja v a  2s .  c o  m
protected void setErrorListener(Transformer transformer) {
    transformer.setErrorListener(new ErrorListener() {

        public void error(TransformerException exception) throws TransformerException {
            throw exception;
        }

        public void fatalError(TransformerException exception) throws TransformerException {
            throw exception;
        }

        public void warning(TransformerException exception) throws TransformerException {
            //ignore
        }

    });
}

From source file:org.apache.fop.plan.PreloaderPlan.java

private Document getDocument(InputStream in) throws TransformerException {
    TransformerFactory tFactory = TransformerFactory.newInstance();
    //Custom error listener to minimize output to console
    ErrorListener errorListener = new DefaultErrorListener(log);
    tFactory.setErrorListener(errorListener);
    Transformer transformer = tFactory.newTransformer();
    transformer.setErrorListener(errorListener);
    Source source = new StreamSource(in);
    DOMResult res = new DOMResult();
    transformer.transform(source, res);/*from www .  java  2  s.co  m*/

    Document doc = (Document) res.getNode();
    return doc;
}

From source file:org.apache.fop.render.intermediate.IFParser.java

/**
 * Parses an intermediate file and paints it.
 * @param src the Source instance pointing to the intermediate file
 * @param documentHandler the intermediate format document handler used to process the IF events
 * @param userAgent the user agent/*from  w ww.  j  ava2 s .c  o  m*/
 * @throws TransformerException if an error occurs while parsing the area tree XML
 * @throws IFException if an IF-related error occurs inside the target document handler
 */
public void parse(Source src, IFDocumentHandler documentHandler, FOUserAgent userAgent)
        throws TransformerException, IFException {
    try {
        Transformer transformer = tFactory.newTransformer();
        transformer.setErrorListener(new DefaultErrorListener(log));

        SAXResult res = new SAXResult(getContentHandler(documentHandler, userAgent));

        transformer.transform(src, res);
    } catch (TransformerException te) {
        //Unpack original IFException if applicable
        if (te.getCause() instanceof SAXException) {
            SAXException se = (SAXException) te.getCause();
            if (se.getCause() instanceof IFException) {
                throw (IFException) se.getCause();
            }
        } else if (te.getCause() instanceof IFException) {
            throw (IFException) te.getCause();
        }
        throw te;
    }
}