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