1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.commons.io.input; 18 19 import java.io.IOException; 20 21 /** 22 * The XmlStreamReaderException is thrown by the XmlStreamReader constructors if 23 * the charset encoding cannot be determined according to the XML 1.0 24 * specification and RFC 3023. 25 * <p> 26 * The exception returns the unconsumed InputStream to allow the application to 27 * do an alternate processing with the stream. Note that the original 28 * InputStream given to the XmlStreamReader cannot be used as that one has been 29 * already read. 30 * </p> 31 * 32 * @since 2.0 33 */ 34 public class XmlStreamReaderException extends IOException { 35 36 private static final long serialVersionUID = 1L; 37 38 /** 39 * The Byte-Order-Mark (BOM) encoding or null. 40 */ 41 private final String bomEncoding; 42 43 /** 44 * The guessed encoding. 45 */ 46 private final String xmlGuessEncoding; 47 48 /** 49 * The XML encoding. 50 */ 51 private final String xmlEncoding; 52 53 /** 54 * The MIME type in the content type. 55 */ 56 private final String contentTypeMime; 57 58 /** 59 * The encoding in the content type. 60 */ 61 private final String contentTypeEncoding; 62 63 /** 64 * Constructs an exception instance if the Charset encoding could not be 65 * determined. 66 * <p> 67 * Instances of this exception are thrown by the XmlStreamReader. 68 * </p> 69 * 70 * @param msg message describing the reason for the exception. 71 * @param bomEnc BOM encoding. 72 * @param xmlGuessEnc XML guess encoding. 73 * @param xmlEnc XML prolog encoding. 74 */ 75 public XmlStreamReaderException(final String msg, final String bomEnc, 76 final String xmlGuessEnc, final String xmlEnc) { 77 this(msg, null, null, bomEnc, xmlGuessEnc, xmlEnc); 78 } 79 80 /** 81 * Constructs an exception instance if the Charset encoding could not be 82 * determined. 83 * <p> 84 * Instances of this exception are thrown by the XmlStreamReader. 85 * </p> 86 * 87 * @param msg message describing the reason for the exception. 88 * @param ctMime MIME type in the content-type. 89 * @param ctEnc encoding in the content-type. 90 * @param bomEnc BOM encoding. 91 * @param xmlGuessEnc XML guess encoding. 92 * @param xmlEnc XML prolog encoding. 93 */ 94 public XmlStreamReaderException(final String msg, final String ctMime, final String ctEnc, 95 final String bomEnc, final String xmlGuessEnc, final String xmlEnc) { 96 super(msg); 97 contentTypeMime = ctMime; 98 contentTypeEncoding = ctEnc; 99 bomEncoding = bomEnc; 100 xmlGuessEncoding = xmlGuessEnc; 101 xmlEncoding = xmlEnc; 102 } 103 104 /** 105 * Gets the BOM encoding found in the InputStream. 106 * 107 * @return the BOM encoding, null if none. 108 */ 109 public String getBomEncoding() { 110 return bomEncoding; 111 } 112 113 /** 114 * Gets the encoding in the content-type used to attempt determining the 115 * encoding. 116 * 117 * @return the encoding in the content-type, null if there was not 118 * content-type, no encoding in it or the encoding detection did not 119 * involve HTTP. 120 */ 121 public String getContentTypeEncoding() { 122 return contentTypeEncoding; 123 } 124 125 /** 126 * Gets the MIME type in the content-type used to attempt determining the 127 * encoding. 128 * 129 * @return the MIME type in the content-type, null if there was not 130 * content-type or the encoding detection did not involve HTTP. 131 */ 132 public String getContentTypeMime() { 133 return contentTypeMime; 134 } 135 136 /** 137 * Gets the encoding found in the XML prolog of the input. 138 * 139 * @return the encoding of the XML prolog, null if none. 140 */ 141 public String getXmlEncoding() { 142 return xmlEncoding; 143 } 144 145 /** 146 * Gets the encoding guess based on the first bytes of the input. 147 * 148 * @return the encoding guess, null if it couldn't be guessed. 149 */ 150 public String getXmlGuessEncoding() { 151 return xmlGuessEncoding; 152 } 153 }