Repository: jclouds Updated Branches: refs/heads/1.8.x f2d897d97 -> 5330699fe
Improve XML compatibility with trace-level logging Some providers, notably Azure, include a byte-order mark in their XML responses. ParseSax.apply buffers these responses in a String when users enable trace-level logging to include the response in any thrown exceptions. InputSource(InputStream) skips these byte-order marks while InputSource(Reader) does not, yielding a SAXParseException. Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/5330699f Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/5330699f Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/5330699f Branch: refs/heads/1.8.x Commit: 5330699fe771deccaa115975e52e1795d1a32d0d Parents: f2d897d Author: Andrew Gaul <[email protected]> Authored: Fri Sep 5 16:16:07 2014 -0700 Committer: Andrew Gaul <[email protected]> Committed: Fri Sep 5 17:56:11 2014 -0700 ---------------------------------------------------------------------- core/src/main/java/org/jclouds/http/functions/ParseSax.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/5330699f/core/src/main/java/org/jclouds/http/functions/ParseSax.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/jclouds/http/functions/ParseSax.java b/core/src/main/java/org/jclouds/http/functions/ParseSax.java index 31fb7d6..3650344 100644 --- a/core/src/main/java/org/jclouds/http/functions/ParseSax.java +++ b/core/src/main/java/org/jclouds/http/functions/ParseSax.java @@ -21,6 +21,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.jclouds.http.HttpUtils.closeClientButKeepContentStream; import static org.jclouds.util.Closeables2.closeQuietly; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; @@ -91,9 +92,11 @@ public class ParseSax<T> implements Function<HttpResponse, T>, InvocationContext private T convertStreamToStringAndParse(HttpResponse response) { String from = null; try { - from = new String(closeClientButKeepContentStream(response)); + byte[] fromBytes = closeClientButKeepContentStream(response); + from = new String(fromBytes); validateXml(from); - return doParse(new InputSource(new StringReader(from))); + // Use InputStream to skip over byte order mark. + return doParse(new InputSource(new ByteArrayInputStream(fromBytes))); } catch (Exception e) { return addDetailsAndPropagate(response, e, from); }
