1 /* 2 * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 // SAX exception class. 27 // http://www.saxproject.org 28 // No warranty; no copyright -- use this as you will. 29 // $Id: SAXParseException.java,v 1.2 2004/11/03 22:55:32 jsuttor Exp $ 30 31 package jdk.internal.org.xml.sax; 32 33 /** 34 * Encapsulate an XML parse error or warning. 35 * 36 * <blockquote> 37 * <em>This module, both source code and documentation, is in the 38 * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em> 39 * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a> 40 * for further information. 41 * </blockquote> 42 * 43 * <p>This exception may include information for locating the error 44 * in the original XML document, as if it came from a {@link Locator} 45 * object. Note that although the application 46 * will receive a SAXParseException as the argument to the handlers 47 * in the {@link org.xml.sax.ErrorHandler ErrorHandler} interface, 48 * the application is not actually required to throw the exception; 49 * instead, it can simply read the information in it and take a 50 * different action.</p> 51 * 52 * <p>Since this exception is a subclass of {@link org.xml.sax.SAXException 53 * SAXException}, it inherits the ability to wrap another exception.</p> 54 * 55 * @since SAX 1.0 56 * @author David Megginson 57 * @version 2.0.1 (sax2r2) 58 * @see org.xml.sax.SAXException 59 * @see org.xml.sax.Locator 60 * @see org.xml.sax.ErrorHandler 61 */ 62 public class SAXParseException extends SAXException { 63 64 65 ////////////////////////////////////////////////////////////////////// 66 // Constructors. 67 ////////////////////////////////////////////////////////////////////// 68 69 70 /** 71 * Create a new SAXParseException from a message and a Locator. 72 * 73 * <p>This constructor is especially useful when an application is 74 * creating its own exception from within a {@link org.xml.sax.ContentHandler 75 * ContentHandler} callback.</p> 76 * 77 * @param message The error or warning message. 78 * @param locator The locator object for the error or warning (may be 79 * null). 80 * @see org.xml.sax.Locator 81 */ 82 public SAXParseException (String message, Locator locator) { 83 super(message); 84 if (locator != null) { 85 init(locator.getPublicId(), locator.getSystemId(), 86 locator.getLineNumber(), locator.getColumnNumber()); 87 } else { 88 init(null, null, -1, -1); 89 } 90 } 91 92 93 /** 94 * Wrap an existing exception in a SAXParseException. 95 * 96 * <p>This constructor is especially useful when an application is 97 * creating its own exception from within a {@link org.xml.sax.ContentHandler 98 * ContentHandler} callback, and needs to wrap an existing exception that is not a 99 * subclass of {@link org.xml.sax.SAXException SAXException}.</p> 100 * 101 * @param message The error or warning message, or null to 102 * use the message from the embedded exception. 103 * @param locator The locator object for the error or warning (may be 104 * null). 105 * @param e Any exception. 106 * @see org.xml.sax.Locator 107 */ 108 public SAXParseException (String message, Locator locator, 109 Exception e) { 110 super(message, e); 111 if (locator != null) { 112 init(locator.getPublicId(), locator.getSystemId(), 113 locator.getLineNumber(), locator.getColumnNumber()); 114 } else { 115 init(null, null, -1, -1); 116 } 117 } 118 119 120 /** 121 * Create a new SAXParseException. 122 * 123 * <p>This constructor is most useful for parser writers.</p> 124 * 125 * <p>All parameters except the message are as if 126 * they were provided by a {@link Locator}. For example, if the 127 * system identifier is a URL (including relative filename), the 128 * caller must resolve it fully before creating the exception.</p> 129 * 130 * 131 * @param message The error or warning message. 132 * @param publicId The public identifier of the entity that generated 133 * the error or warning. 134 * @param systemId The system identifier of the entity that generated 135 * the error or warning. 136 * @param lineNumber The line number of the end of the text that 137 * caused the error or warning. 138 * @param columnNumber The column number of the end of the text that 139 * cause the error or warning. 140 */ 141 public SAXParseException (String message, String publicId, String systemId, 142 int lineNumber, int columnNumber) 143 { 144 super(message); 145 init(publicId, systemId, lineNumber, columnNumber); 146 } 147 148 149 /** 150 * Create a new SAXParseException with an embedded exception. 151 * 152 * <p>This constructor is most useful for parser writers who 153 * need to wrap an exception that is not a subclass of 154 * {@link org.xml.sax.SAXException SAXException}.</p> 155 * 156 * <p>All parameters except the message and exception are as if 157 * they were provided by a {@link Locator}. For example, if the 158 * system identifier is a URL (including relative filename), the 159 * caller must resolve it fully before creating the exception.</p> 160 * 161 * @param message The error or warning message, or null to use 162 * the message from the embedded exception. 163 * @param publicId The public identifier of the entity that generated 164 * the error or warning. 165 * @param systemId The system identifier of the entity that generated 166 * the error or warning. 167 * @param lineNumber The line number of the end of the text that 168 * caused the error or warning. 169 * @param columnNumber The column number of the end of the text that 170 * cause the error or warning. 171 * @param e Another exception to embed in this one. 172 */ 173 public SAXParseException (String message, String publicId, String systemId, 174 int lineNumber, int columnNumber, Exception e) 175 { 176 super(message, e); 177 init(publicId, systemId, lineNumber, columnNumber); 178 } 179 180 181 /** 182 * Internal initialization method. 183 * 184 * @param publicId The public identifier of the entity which generated the exception, 185 * or null. 186 * @param systemId The system identifier of the entity which generated the exception, 187 * or null. 188 * @param lineNumber The line number of the error, or -1. 189 * @param columnNumber The column number of the error, or -1. 190 */ 191 private void init (String publicId, String systemId, 192 int lineNumber, int columnNumber) 193 { 194 this.publicId = publicId; 195 this.systemId = systemId; 196 this.lineNumber = lineNumber; 197 this.columnNumber = columnNumber; 198 } 199 200 201 /** 202 * Get the public identifier of the entity where the exception occurred. 203 * 204 * @return A string containing the public identifier, or null 205 * if none is available. 206 * @see org.xml.sax.Locator#getPublicId 207 */ 208 public String getPublicId () 209 { 210 return this.publicId; 211 } 212 213 214 /** 215 * Get the system identifier of the entity where the exception occurred. 216 * 217 * <p>If the system identifier is a URL, it will have been resolved 218 * fully.</p> 219 * 220 * @return A string containing the system identifier, or null 221 * if none is available. 222 * @see org.xml.sax.Locator#getSystemId 223 */ 224 public String getSystemId () 225 { 226 return this.systemId; 227 } 228 229 230 /** 231 * The line number of the end of the text where the exception occurred. 232 * 233 * <p>The first line is line 1.</p> 234 * 235 * @return An integer representing the line number, or -1 236 * if none is available. 237 * @see org.xml.sax.Locator#getLineNumber 238 */ 239 public int getLineNumber () 240 { 241 return this.lineNumber; 242 } 243 244 245 /** 246 * The column number of the end of the text where the exception occurred. 247 * 248 * <p>The first column in a line is position 1.</p> 249 * 250 * @return An integer representing the column number, or -1 251 * if none is available. 252 * @see org.xml.sax.Locator#getColumnNumber 253 */ 254 public int getColumnNumber () 255 { 256 return this.columnNumber; 257 } 258 259 /** 260 * Override toString to provide more detailed error message. 261 * 262 * @return A string representation of this exception. 263 */ 264 public String toString() { 265 StringBuilder buf = new StringBuilder(getClass().getName()); 266 String message = getLocalizedMessage(); 267 if (publicId!=null) buf.append("publicId: ").append(publicId); 268 if (systemId!=null) buf.append("; systemId: ").append(systemId); 269 if (lineNumber!=-1) buf.append("; lineNumber: ").append(lineNumber); 270 if (columnNumber!=-1) buf.append("; columnNumber: ").append(columnNumber); 271 272 //append the exception message at the end 273 if (message!=null) buf.append("; ").append(message); 274 return buf.toString(); 275 } 276 277 ////////////////////////////////////////////////////////////////////// 278 // Internal state. 279 ////////////////////////////////////////////////////////////////////// 280 281 282 /** 283 * @serial The public identifier, or null. 284 * @see #getPublicId 285 */ 286 private String publicId; 287 288 289 /** 290 * @serial The system identifier, or null. 291 * @see #getSystemId 292 */ 293 private String systemId; 294 295 296 /** 297 * @serial The line number, or -1. 298 * @see #getLineNumber 299 */ 300 private int lineNumber; 301 302 303 /** 304 * @serial The column number, or -1. 305 * @see #getColumnNumber 306 */ 307 private int columnNumber; 308 309 // Added serialVersionUID to preserve binary compatibility 310 @java.io.Serial 311 static final long serialVersionUID = -5651165872476709336L; 312 } 313 314 // end of SAXParseException.java