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