Package smilehouse.opensyncro.defaultcomponents.converter.xml.xslt

Source Code of smilehouse.opensyncro.defaultcomponents.converter.xml.xslt.TransformerErrorListener

/* OpenSyncro - A web-based enterprise application integration tool
* Copyright (C) 2008 Smilehouse Oy, support@opensyncro.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/

/*
* Created on Aug 8, 2005
*
* ToDo: Error and Fatal Error ErrorListeners do not seem to abort XSLT processing
* by throwing a TransformerException, which sometimes causes multiple error
* messages of the same type to be logged in sequence.
*
*/
package smilehouse.opensyncro.defaultcomponents.converter.xml.xslt;

import javax.xml.transform.ErrorListener;
import javax.xml.transform.SourceLocator;
import javax.xml.transform.TransformerException;

import smilehouse.opensyncro.pipes.component.ConverterIF;
import smilehouse.opensyncro.pipes.log.MessageLogger;


    /* ErrorListener for XSLT parsing and runtime warnings and errors.
     * Writes warning, error and fatal error messages to Transfer Log.
     */
    public class TransformerErrorListener implements ErrorListener {
        private MessageLogger logger;
        private String errorMessageActionText;
        ConverterIF parentClassReference;

        public TransformerErrorListener(String errorMessageActionText,
                                        MessageLogger messageLogger,
                                        ConverterIF parentClassReference) {
            this.errorMessageActionText = errorMessageActionText;
            this.logger = messageLogger;
            this.parentClassReference = parentClassReference;
        }

        public void warning(TransformerException exception) {
            SourceLocator loc = exception.getLocator();
            if(loc != null) {
                logger.logMessage(
                    "Warning while " + errorMessageActionText + " at line " + loc.getLineNumber()
                            + ", column " + loc.getColumnNumber() + ": "
                            + getExceptionErrorMessage(exception),
                    parentClassReference,
                    MessageLogger.WARNING);

            } else {
                logger.logMessage(
                    "Warning while " + errorMessageActionText + ": "
                            + getExceptionErrorMessage(exception),
                    parentClassReference,
                    MessageLogger.WARNING);

            }
        }

        public void error(TransformerException exception) throws TransformerException {

            SourceLocator loc = exception.getLocator();
            if(loc != null) {
                logger.logMessage(
                    "Error " + errorMessageActionText + " at line " + loc.getLineNumber()
                            + ", column " + loc.getColumnNumber() + ": "
                            + getExceptionErrorMessage(exception),
                    parentClassReference,
                    MessageLogger.ERROR);
            } else {
                logger.logMessage(
                    "Error " + errorMessageActionText + ": " + getExceptionErrorMessage(exception),
                    parentClassReference,
                    MessageLogger.ERROR);
            }

            /*
             * We try to abort XSLT processing at a fatal error, but throwing the
             * TransformerException does not seem to work(?)
             */
            throw exception;

        }

        public void fatalError(TransformerException exception) throws TransformerException {
            SourceLocator loc = exception.getLocator();
            if(loc != null) {
                logger.logMessage(
                    "Fatal error " + errorMessageActionText + " at line " + loc.getLineNumber()
                            + ", column " + loc.getColumnNumber() + ": "
                            + getExceptionErrorMessage(exception),
                    parentClassReference,
                    MessageLogger.ERROR);


            } else {
                logger.logMessage(
                    "Fatal error " + errorMessageActionText + ": "
                            + getExceptionErrorMessage(exception),
                    parentClassReference,
                    MessageLogger.ERROR);

            }
            /*
             * We should abort XSLT processing at a fatal error, but throwing the
             * TransformerException does not seem to work(?)
             */
            throw exception;
        }
       
        /*
         * Get a complete Exception error message and skip Exception names before the detailed error
         * message
         */
        private String getExceptionErrorMessage(Exception e) {
            int exceptionStringOffset;
            String errorMessage = e.getMessage();

            exceptionStringOffset = errorMessage.indexOf("Exception: ");
            while(exceptionStringOffset >= 0) {

                // Length of string "Exception: " == 11
                errorMessage = errorMessage
                    .substring(exceptionStringOffset + 11, errorMessage.length());
                exceptionStringOffset = errorMessage.indexOf("Exception: ");
            }
            return errorMessage;
        }
    }
TOP

Related Classes of smilehouse.opensyncro.defaultcomponents.converter.xml.xslt.TransformerErrorListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.