1 package net.sf.saxon; 2 3 import net.sf.saxon.trans.DynamicError; 4 import net.sf.saxon.trans.SaxonErrorCode; 5 import org.xml.sax.SAXException ; 6 import org.xml.sax.SAXParseException ; 7 8 import javax.xml.transform.ErrorListener ; 9 import javax.xml.transform.TransformerException ; 10 import java.io.PrintWriter ; 11 import java.io.Writer ; 12 13 public class StandardErrorHandler implements org.xml.sax.ErrorHandler , javax.xml.transform.SourceLocator { 14 15 19 private ErrorListener errorListener; 20 private String systemId; 21 private int lineNumber = -1; 22 private int columnNumber = -1; 23 24 private Writer errorOutput = new PrintWriter (System.err); 25 26 public StandardErrorHandler(ErrorListener listener) { 27 errorListener = listener; 28 } 29 30 40 41 public void setErrorOutput(Writer writer) { 42 errorOutput = writer; 43 } 44 45 48 49 public void warning (SAXParseException e) { 50 if (errorListener != null) { 51 try { 52 errorListener.warning(new TransformerException (e)); 53 } catch (Exception err) {} 54 } 55 } 56 57 60 61 public void error (SAXParseException e) throws SAXException { 62 reportError(e, false); 63 } 65 66 69 70 public void fatalError (SAXParseException e) throws SAXException { 71 reportError(e, true); 72 throw e; 74 } 75 76 79 80 protected void reportError (SAXParseException e, boolean isFatal) { 81 82 if (errorListener != null) { 83 try { 84 systemId = e.getSystemId(); 85 lineNumber = e.getLineNumber(); 86 columnNumber = e.getColumnNumber(); 87 DynamicError err = 88 new DynamicError("Error reported by XML parser", this, e); 89 err.setErrorCode(SaxonErrorCode.SXXP0003); 90 if (isFatal) { 91 errorListener.fatalError(err); 92 } else { 93 errorListener.error(err); 94 } 95 } catch (Exception err) {} 96 } else { 97 98 try { 99 String errcat = (isFatal ? "Fatal error" : "Error"); 100 errorOutput.write(errcat + " reported by XML parser: " + e.getMessage() + "\n"); 101 errorOutput.write(" URL: " + e.getSystemId() + "\n"); 102 errorOutput.write(" Line: " + e.getLineNumber() + "\n"); 103 errorOutput.write(" Column: " + e.getColumnNumber() + "\n"); 104 errorOutput.flush(); 105 } catch (Exception e2) { 106 System.err.println(e); 107 System.err.println(e2); 108 e2.printStackTrace(); 109 }; 110 } 111 } 112 113 117 public String getSystemId() { 118 return systemId; 119 } 120 121 public String getPublicId() { 122 return null; 123 } 124 125 public int getLineNumber() { 126 return lineNumber; 127 } 128 129 public int getColumnNumber() { 130 return columnNumber; 131 } 132 } 133 134 | Popular Tags |