Changeset 25423

Show
Ignore:
Timestamp:
19.04.2012 14:58:44 (8 years ago)
Author:
ak19
Message:

Better error reporting during transformations. Extended the TransformErrorListener? to store the XSLT upon construction and print it out (besides the exception message) upon exception.

Location:
main/trunk/greenstone3/src/java/org/greenstone/gsdl3
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/core/TransformingReceptionist.java

    r25301 r25423  
    618618 
    619619            Transformer preProcessor = transformerFactory.newTransformer(new DOMSource(preprocessingXsl)); 
    620             preProcessor.setErrorListener(new XMLTransformer.TransformErrorListener()); 
     620            preProcessor.setErrorListener(new XMLTransformer.TransformErrorListener(preprocessingXsl)); 
    621621            DOMResult result = new DOMResult(); 
    622622            result.setNode(skinAndLibraryDoc); 
     
    864864            transformer.transform(domSource, result); 
    865865            content = writer.toString(); 
    866             System.out.println("Change the & to &Amp; for proper debug dispay"); 
     866            System.out.println("Change the & to &Amp; for proper debug display"); 
    867867            content = StringUtils.replace(content, "&", "&"); 
    868868            writer.flush(); 
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/GSXML.java

    r25313 r25423  
    3131import javax.xml.transform.stream.StreamResult; 
    3232import javax.xml.transform.dom.DOMSource; 
     33import javax.xml.transform.OutputKeys; 
    3334 
    3435import java.util.Map; 
     
    12341235    } 
    12351236 
    1236     public static void elementToLogAsString(Element e) 
    1237     { 
    1238         try 
    1239         { 
    1240             TransformerFactory tf = TransformerFactory.newInstance(); 
    1241             Transformer trans = tf.newTransformer(); 
    1242             StringWriter sw = new StringWriter(); 
    1243             trans.transform(new DOMSource(e), new StreamResult(sw)); 
    1244             System.err.println(sw.toString()); 
    1245         } 
    1246         catch (Exception ex) 
    1247         { 
    1248             System.err.println("couldn't write " + e + " to log"); 
    1249         } 
     1237    public static void elementToLogAsString(Element e, boolean indent) 
     1238    { 
     1239    String str = elementToString(e, indent); 
     1240    System.err.println(str); 
     1241    logger.error(str); 
     1242    } 
     1243 
     1244    public static String elementToString(Element e, boolean indent) 
     1245    { 
     1246        String str = "**********START*************\n"; 
     1247        try { 
     1248        TransformerFactory tf = TransformerFactory.newInstance(); 
     1249        Transformer trans = tf.newTransformer(); 
     1250        StringWriter sw = new StringWriter(); 
     1251        if(indent) { 
     1252            trans.setOutputProperty(OutputKeys.INDENT, "yes"); 
     1253        } else { 
     1254            trans.setOutputProperty(OutputKeys.INDENT, "no"); 
     1255        } 
     1256        trans.transform(new DOMSource(e), new StreamResult(sw)); 
     1257        str += sw.toString(); 
     1258        } 
     1259        catch (Exception ex) { 
     1260        str += "Exception: couldn't write " + e + " to log"; 
     1261        }  
     1262        finally { 
     1263        str += "\n***********************\n"; 
     1264        return str; 
     1265        } 
    12501266    } 
    12511267 
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/XMLTransformer.java

    r24472 r25423  
    4242import java.io.StringReader; 
    4343import java.io.StringWriter; 
     44import java.io.BufferedReader; 
     45import java.io.FileReader; 
    4446import java.io.File; 
    4547import java.util.HashMap; 
     
    116118        // Use the TransformerFactory to process the stylesheet Source and generate a Transformer. 
    117119        Transformer transformer = this.t_factory.newTransformer(new StreamSource(stylesheet)); 
    118         transformer.setErrorListener(new TransformErrorListener()); 
     120        transformer.setErrorListener(new TransformErrorListener(stylesheet)); 
    119121 
    120122        // Use the Transformer to transform an XML Source and send the output to a Result object. 
     
    142144        // Use the TransformerFactory to process the stylesheet Source and generate a Transformer. 
    143145        Transformer transformer = this.t_factory.newTransformer(new DOMSource(stylesheet)); 
    144         transformer.setErrorListener(new TransformErrorListener()); 
     146        transformer.setErrorListener(new TransformErrorListener(stylesheet)); 
    145147        if (parameters != null) { 
    146148        Set params = parameters.entrySet(); 
     
    182184            Transformer transformer = this.t_factory.newTransformer(new DOMSource(stylesheet)); 
    183185            logger.info("XMLTransformer transformer is " + transformer); 
    184             transformer.setErrorListener(new TransformErrorListener()); 
     186            transformer.setErrorListener(new TransformErrorListener(stylesheet)); 
    185187            if (parameters != null) { 
    186188                Set params = parameters.entrySet(); 
     
    214216    try { 
    215217        Transformer transformer = this.t_factory.newTransformer(new StreamSource(stylesheet)); 
    216         transformer.setErrorListener(new TransformErrorListener()); 
     218        transformer.setErrorListener(new TransformErrorListener(stylesheet)); 
    217219        DOMResult result = new DOMResult(); 
    218220        transformer.transform(new StreamSource(source), result); 
     
    233235        try { 
    234236            Transformer transformer = this.t_factory.newTransformer(new StreamSource(stylesheet)); 
    235             transformer.setErrorListener(new TransformErrorListener()); 
     237            transformer.setErrorListener(new TransformErrorListener(stylesheet)); 
    236238            DOMResult result = new DOMResult(docDocType); 
    237239            transformer.transform(new StreamSource(source), result); 
     
    320322    // be retrieved and be used to generate an xhtml error page. 
    321323    static public class TransformErrorListener implements ErrorListener { 
    322         protected String errorMessage = null; 
    323      
    324         //  Receive notification of a recoverable error. 
    325         public void error(TransformerException exception) { 
    326             handleError("Error:\n", exception); 
    327         } 
    328         //   Receive notification of a non-recoverable error. 
    329         public void fatalError(TransformerException exception) { 
    330             handleError("Fatal Error:\n", exception); 
    331         } 
    332         // Receive notification of a warning. 
    333         public void warning(TransformerException exception) { 
    334             handleError("Warning:\n", exception); 
    335         } 
     324        protected String errorMessage = null; 
     325        protected String stylesheet = null; 
     326        protected String file = null; 
     327         
     328        public TransformErrorListener(String xslt) {  
     329        this.stylesheet = xslt;  
     330        } 
     331 
     332        public TransformErrorListener(Document xslt) {  
     333        //this.stylesheet = GSXML.xmlNodeToString(xslt);  
     334        this.stylesheet = GSXML.elementToString(xslt.getDocumentElement(), true); 
     335        } 
     336 
     337        public TransformErrorListener(File xslt) {  
     338        stylesheet = "";         
     339        file = xslt.getAbsolutePath(); 
     340        String error = "Can't locate stylesheet file: " + xslt; 
     341 
     342        if(!xslt.exists()) { 
     343            stylesheet = error; 
     344            System.err.println("@@@@@@@ " + error); 
     345            return; 
     346        } 
     347        try { 
     348            BufferedReader in = new BufferedReader(new FileReader(xslt)); 
     349            String line = ""; 
     350            while((line = in.readLine()) != null) { 
     351            stylesheet = stylesheet + line + "\n"; 
     352            } 
     353            in.close(); 
     354            in = null; 
     355        } catch(Exception e) { 
     356            stylesheet = error; 
     357            System.err.println("Exception reading file: " + xslt.getAbsolutePath()); 
     358            e.printStackTrace(); 
     359        } 
     360        } 
     361 
     362        //  Receive notification of a recoverable error. 
     363        public void error(TransformerException exception) { 
     364        handleError("Error:\n", exception); 
     365        } 
     366        // Receive notification of a non-recoverable error. 
     367        public void fatalError(TransformerException exception) { 
     368        handleError("Fatal Error:\n", exception); 
     369        } 
     370        // Receive notification of a warning. 
     371        public void warning(TransformerException exception) { 
     372        handleError("Warning:\n", exception); 
     373        } 
    336374         
    337         public String toString(TransformerException e) { 
    338             String location = e.getLocationAsString(); 
    339             if(location == null) { 
    340                 return e.getMessage(); 
    341             } 
    342             return e.getMessage() + "\n" + location; 
    343         } 
    344          
    345         // clears the errorPage variable after first call to this method 
    346         public String getErrorMessage() { 
    347             String errMsg = this.errorMessage; 
    348             if(this.errorMessage != null) { 
    349                 this.errorMessage = null; 
    350             } 
    351             return errMsg; 
    352         } 
    353          
    354         // sets the errorMessage member variable to the data stored in the exception 
    355         // and writes the errorMessage to the logger and tomcat's System.err 
    356         protected void handleError(String errorType, TransformerException exception) { 
    357             this.errorMessage = errorType + toString(exception);  
    358             System.err.println("\n****Error transforming xml:\n" + this.errorMessage + "\n****\n"); 
    359             logger.error(this.errorMessage); 
    360         } 
     375        public String toString(TransformerException e) { 
     376        String msg = "Exception encountered was:\n\t"; 
     377        String location = e.getLocationAsString(); 
     378        if(location != null) {           
     379            msg = msg + "Location: " + location + "\n\t"; 
     380        }  
     381 
     382        return msg + "Message: " + e.getMessage(); 
     383        } 
     384         
     385        // clears the errorPage variable after first call to this method 
     386        public String getErrorMessage() { 
     387        String errMsg = this.errorMessage; 
     388        if(this.errorMessage != null) { 
     389            this.errorMessage = null; 
     390        } 
     391        return errMsg; 
     392        } 
     393         
     394        // sets the errorMessage member variable to the data stored in the exception 
     395        // and writes the errorMessage to the logger and tomcat's System.err 
     396        protected void handleError(String errorType, TransformerException exception) { 
     397        this.errorMessage = errorType + toString(exception);  
     398        if(file != null) {  
     399            this.errorMessage = this.errorMessage + "\nfilename: " + file; 
     400        } 
     401        this.errorMessage += "\nException CAUSE:\n" + exception.getCause(); 
     402        System.err.println("\n****Error transforming xml:\n" + this.errorMessage + "\n****\n"); 
     403        System.err.println("Stylesheet was:\n" + this.stylesheet + "\n\n"); 
     404        logger.error(this.errorMessage); 
     405        } 
    361406    } 
    362407}