001 /* 002 * Copyright (c) 2005, 2007 Henri Sivonen 003 * 004 * Permission is hereby granted, free of charge, to any person obtaining a 005 * copy of this software and associated documentation files (the "Software"), 006 * to deal in the Software without restriction, including without limitation 007 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 008 * and/or sell copies of the Software, and to permit persons to whom the 009 * Software is furnished to do so, subject to the following conditions: 010 * 011 * The above copyright notice and this permission notice shall be included in 012 * all copies or substantial portions of the Software. 013 * 014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 015 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 016 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 017 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 018 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 019 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 020 * DEALINGS IN THE SOFTWARE. 021 */ 022 023 package nu.validator.htmlparser.test; 024 025 import java.io.IOException; 026 import java.io.OutputStreamWriter; 027 import java.io.UnsupportedEncodingException; 028 import java.io.Writer; 029 030 import javax.xml.transform.ErrorListener; 031 import javax.xml.transform.SourceLocator; 032 import javax.xml.transform.TransformerException; 033 034 import org.xml.sax.ErrorHandler; 035 import org.xml.sax.SAXException; 036 import org.xml.sax.SAXParseException; 037 038 /** 039 * @version $Id: SystemErrErrorHandler.java 150 2007-08-16 19:21:25Z hsivonen $ 040 * @author hsivonen 041 */ 042 public class SystemErrErrorHandler implements ErrorHandler, ErrorListener { 043 044 private Writer out; 045 046 private boolean inError = false; 047 048 public SystemErrErrorHandler() { 049 try { 050 out = new OutputStreamWriter(System.err, "UTF-8"); 051 } catch (UnsupportedEncodingException e) { 052 throw new RuntimeException(e); 053 } 054 } 055 056 /** 057 * @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException) 058 */ 059 public void warning(SAXParseException e) throws SAXException { 060 try { 061 out.write("Warning:\n"); 062 out.write(e.getMessage()); 063 out.write("\nFile: "); 064 String systemId = e.getSystemId(); 065 out.write((systemId == null) ? "Unknown" : systemId); 066 out.write("\nLine: "); 067 out.write(Integer.toString(e.getLineNumber())); 068 out.write(" Col: "); 069 out.write(Integer.toString(e.getColumnNumber())); 070 out.write("\n\n"); 071 out.flush(); 072 } catch (IOException e1) { 073 throw new SAXException(e1); 074 } 075 } 076 077 /** 078 * @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException) 079 */ 080 public void error(SAXParseException e) throws SAXException { 081 inError = true; 082 try { 083 out.write("Error:\n"); 084 out.write(e.getMessage()); 085 out.write("\nFile: "); 086 String systemId = e.getSystemId(); 087 out.write((systemId == null) ? "Unknown" : systemId); 088 out.write("\nLine: "); 089 out.write(Integer.toString(e.getLineNumber())); 090 out.write(" Col: "); 091 out.write(Integer.toString(e.getColumnNumber())); 092 out.write("\n\n"); 093 out.flush(); 094 } catch (IOException e1) { 095 throw new SAXException(e1); 096 } 097 } 098 099 /** 100 * @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException) 101 */ 102 public void fatalError(SAXParseException e) throws SAXException { 103 inError = true; 104 try { 105 out.write("Fatal Error:\n"); 106 out.write(e.getMessage()); 107 out.write("\nFile: "); 108 String systemId = e.getSystemId(); 109 out.write((systemId == null) ? "Unknown" : systemId); 110 out.write("\nLine: "); 111 out.write(Integer.toString(e.getLineNumber())); 112 out.write(" Col: "); 113 out.write(Integer.toString(e.getColumnNumber())); 114 out.write("\n\n"); 115 out.flush(); 116 } catch (IOException e1) { 117 throw new SAXException(e1); 118 } 119 } 120 121 /** 122 * Returns the inError. 123 * 124 * @return the inError 125 */ 126 public boolean isInError() { 127 return inError; 128 } 129 130 public void reset() { 131 inError = false; 132 } 133 134 public void error(TransformerException e) throws TransformerException { 135 inError = true; 136 try { 137 out.write("Error:\n"); 138 out.write(e.getMessage()); 139 SourceLocator sourceLocator = e.getLocator(); 140 if (sourceLocator != null) { 141 out.write("\nFile: "); 142 String systemId = sourceLocator.getSystemId(); 143 out.write((systemId == null) ? "Unknown" : systemId); 144 out.write("\nLine: "); 145 out.write(Integer.toString(sourceLocator.getLineNumber())); 146 out.write(" Col: "); 147 out.write(Integer.toString(sourceLocator.getColumnNumber())); 148 } 149 out.write("\n\n"); 150 out.flush(); 151 } catch (IOException e1) { 152 throw new TransformerException(e1); 153 } 154 } 155 156 public void fatalError(TransformerException e) 157 throws TransformerException { 158 inError = true; 159 try { 160 out.write("Fatal Error:\n"); 161 out.write(e.getMessage()); 162 SourceLocator sourceLocator = e.getLocator(); 163 if (sourceLocator != null) { 164 out.write("\nFile: "); 165 String systemId = sourceLocator.getSystemId(); 166 out.write((systemId == null) ? "Unknown" : systemId); 167 out.write("\nLine: "); 168 out.write(Integer.toString(sourceLocator.getLineNumber())); 169 out.write(" Col: "); 170 out.write(Integer.toString(sourceLocator.getColumnNumber())); 171 } 172 out.write("\n\n"); 173 out.flush(); 174 } catch (IOException e1) { 175 throw new TransformerException(e1); 176 } 177 } 178 179 public void warning(TransformerException e) 180 throws TransformerException { 181 try { 182 out.write("Warning:\n"); 183 out.write(e.getMessage()); 184 SourceLocator sourceLocator = e.getLocator(); 185 if (sourceLocator != null) { 186 out.write("\nFile: "); 187 String systemId = sourceLocator.getSystemId(); 188 out.write((systemId == null) ? "Unknown" : systemId); 189 out.write("\nLine: "); 190 out.write(Integer.toString(sourceLocator.getLineNumber())); 191 out.write(" Col: "); 192 out.write(Integer.toString(sourceLocator.getColumnNumber())); 193 } 194 out.write("\n\n"); 195 out.flush(); 196 } catch (IOException e1) { 197 throw new TransformerException(e1); 198 } 199 } 200 201 }