You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2010/10/06 03:20:43 UTC
svn commit: r1004871 -
/commons/proper/io/trunk/src/main/java/org/apache/commons/io/input/XmlStreamReader.java
Author: niallp
Date: Wed Oct 6 01:20:43 2010
New Revision: 1004871
URL: http://svn.apache.org/viewvc?rev=1004871&view=rev
Log:
IO-162 Refactor lenient processing - simplifies the code and avoids reprocessing the stream
Modified:
commons/proper/io/trunk/src/main/java/org/apache/commons/io/input/XmlStreamReader.java
Modified: commons/proper/io/trunk/src/main/java/org/apache/commons/io/input/XmlStreamReader.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/input/XmlStreamReader.java?rev=1004871&r1=1004870&r2=1004871&view=diff
==============================================================================
--- commons/proper/io/trunk/src/main/java/org/apache/commons/io/input/XmlStreamReader.java (original)
+++ commons/proper/io/trunk/src/main/java/org/apache/commons/io/input/XmlStreamReader.java Wed Oct 6 01:20:43 2010
@@ -185,15 +185,7 @@ public class XmlStreamReader extends Rea
*/
public XmlStreamReader(InputStream is, boolean lenient) throws IOException {
defaultEncoding = staticDefaultEncoding;
- try {
- doRawStream(is, lenient);
- } catch (XmlStreamReaderException ex) {
- if (!lenient) {
- throw ex;
- } else {
- doLenientDetection(null, is, ex);
- }
- }
+ doRawStream(is, lenient);
}
/**
@@ -238,20 +230,11 @@ public class XmlStreamReader extends Rea
public XmlStreamReader(URLConnection conn) throws IOException {
defaultEncoding = staticDefaultEncoding;
boolean lenient = true;
- InputStream is = conn.getInputStream();
String contentType = conn.getContentType();
if (conn instanceof HttpURLConnection || contentType != null) {
- try {
- doHttpStream(is, contentType, lenient);
- } catch (XmlStreamReaderException ex) {
- doLenientDetection(contentType, is, ex);
- }
+ doHttpStream(conn.getInputStream(), contentType, lenient);
} else {
- try {
- doRawStream(is, lenient);
- } catch (XmlStreamReaderException ex) {
- doLenientDetection(null, is, ex);
- }
+ doRawStream(conn.getInputStream(), lenient);
}
}
@@ -315,15 +298,7 @@ public class XmlStreamReader extends Rea
boolean lenient, String defaultEncoding) throws IOException {
this.defaultEncoding = (defaultEncoding == null) ? staticDefaultEncoding
: defaultEncoding;
- try {
- doHttpStream(is, httpContentType, lenient);
- } catch (XmlStreamReaderException ex) {
- if (!lenient) {
- throw ex;
- } else {
- doLenientDetection(httpContentType, is, ex);
- }
- }
+ doHttpStream(is, httpContentType, lenient);
}
/**
@@ -371,9 +346,10 @@ public class XmlStreamReader extends Rea
* the charset encoding.
* @param is the unconsumed InputStream
* @param ex The thrown exception
+ * @return the encoding
* @throws IOException thrown if there is a problem reading the stream.
*/
- private void doLenientDetection(String httpContentType, InputStream is,
+ private String doLenientDetection(String httpContentType, InputStream is,
XmlStreamReaderException ex) throws IOException {
if (httpContentType != null) {
if (httpContentType.startsWith("text/html")) {
@@ -381,24 +357,21 @@ public class XmlStreamReader extends Rea
.length());
httpContentType = "text/xml" + httpContentType;
try {
- doHttpStream(is, httpContentType, true);
- ex = null;
+ return calculateHttpEncoding(httpContentType, ex.getBomEncoding(),
+ ex.getXmlGuessEncoding(), ex.getXmlEncoding(), true);
} catch (XmlStreamReaderException ex2) {
ex = ex2;
}
}
}
- if (ex != null) {
- String encoding = ex.getXmlEncoding();
- if (encoding == null) {
- encoding = ex.getContentTypeEncoding();
- }
- if (encoding == null) {
- encoding = (defaultEncoding == null) ? UTF_8 : defaultEncoding;
- }
- this.encoding = encoding;
- this.reader = new InputStreamReader(is, encoding);
+ String encoding = ex.getXmlEncoding();
+ if (encoding == null) {
+ encoding = ex.getContentTypeEncoding();
+ }
+ if (encoding == null) {
+ encoding = (defaultEncoding == null) ? UTF_8 : defaultEncoding;
}
+ return encoding;
}
/**
@@ -448,7 +421,15 @@ public class XmlStreamReader extends Rea
String bomEnc = bom.getBOMCharsetName();
String xmlGuessEnc = pis.getBOMCharsetName();
String xmlEnc = getXmlProlog(pis, xmlGuessEnc);
- this.encoding = calculateRawEncoding(bomEnc, xmlGuessEnc, xmlEnc);
+ try {
+ this.encoding = calculateRawEncoding(bomEnc, xmlGuessEnc, xmlEnc);
+ } catch (XmlStreamReaderException ex) {
+ if (lenient) {
+ this.encoding = doLenientDetection(null, is, ex);
+ } else {
+ throw ex;
+ }
+ }
this.reader = new InputStreamReader(is, encoding);
}
@@ -468,8 +449,16 @@ public class XmlStreamReader extends Rea
String bomEnc = bom.getBOMCharsetName();
String xmlGuessEnc = pis.getBOMCharsetName();
String xmlEnc = getXmlProlog(pis, xmlGuessEnc);
- this.encoding = calculateHttpEncoding(httpContentType, bomEnc,
- xmlGuessEnc, xmlEnc, lenient);
+ try {
+ this.encoding = calculateHttpEncoding(httpContentType, bomEnc,
+ xmlGuessEnc, xmlEnc, lenient);
+ } catch (XmlStreamReaderException ex) {
+ if (lenient) {
+ this.encoding = doLenientDetection(httpContentType, is, ex);
+ } else {
+ throw ex;
+ }
+ }
this.reader = new InputStreamReader(is, encoding);
}