Repository: jclouds Updated Branches: refs/heads/master 2487b0c51 -> 78104938e
JCLOUDS-1325: Ignore Unicode BOM in XML parser This caused failures to parse Azure Queue Storage list requests. Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/78104938 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/78104938 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/78104938 Branch: refs/heads/master Commit: 78104938e59914359c12addacfba10d63c352ffc Parents: 2487b0c Author: Andrew Gaul <[email protected]> Authored: Sun Jul 23 19:08:26 2017 -0700 Committer: Andrew Gaul <[email protected]> Committed: Thu Jul 27 10:41:45 2017 -0700 ---------------------------------------------------------------------- .../java/org/jclouds/http/functions/ParseXMLWithJAXB.java | 3 ++- core/src/main/java/org/jclouds/xml/internal/JAXBParser.java | 6 +++++- .../java/org/jclouds/rest/binders/BindToXMLPayloadTest.java | 8 ++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/78104938/core/src/main/java/org/jclouds/http/functions/ParseXMLWithJAXB.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/jclouds/http/functions/ParseXMLWithJAXB.java b/core/src/main/java/org/jclouds/http/functions/ParseXMLWithJAXB.java index 5a94ca0..54f6034 100644 --- a/core/src/main/java/org/jclouds/http/functions/ParseXMLWithJAXB.java +++ b/core/src/main/java/org/jclouds/http/functions/ParseXMLWithJAXB.java @@ -82,7 +82,8 @@ public class ParseXMLWithJAXB<T> implements Function<HttpResponse, T> { public <V> V apply(final InputStream stream, final Class<V> type) throws IOException { try { - return xml.fromXML(Strings2.toStringAndClose(stream), type); + String str = Strings2.toStringAndClose(stream); + return xml.fromXML(str, type); } finally { if (stream != null) { stream.close(); http://git-wip-us.apache.org/repos/asf/jclouds/blob/78104938/core/src/main/java/org/jclouds/xml/internal/JAXBParser.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/jclouds/xml/internal/JAXBParser.java b/core/src/main/java/org/jclouds/xml/internal/JAXBParser.java index 3586299..a858492 100644 --- a/core/src/main/java/org/jclouds/xml/internal/JAXBParser.java +++ b/core/src/main/java/org/jclouds/xml/internal/JAXBParser.java @@ -70,7 +70,11 @@ public class JAXBParser implements XMLParser { @SuppressWarnings("unchecked") @Override - public <T> T fromXML(final String xml, final Class<T> type) throws IOException { + public <T> T fromXML(String xml, final Class<T> type) throws IOException { + // ignore byte order mark + if (xml.charAt(0) == 0xFEFF) { + xml = xml.substring(1); + } try { StringReader reader = new StringReader(xml); JAXBContext context = JAXBContext.newInstance(type); http://git-wip-us.apache.org/repos/asf/jclouds/blob/78104938/core/src/test/java/org/jclouds/rest/binders/BindToXMLPayloadTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/jclouds/rest/binders/BindToXMLPayloadTest.java b/core/src/test/java/org/jclouds/rest/binders/BindToXMLPayloadTest.java index 773fd68..b7d45e2 100644 --- a/core/src/test/java/org/jclouds/rest/binders/BindToXMLPayloadTest.java +++ b/core/src/test/java/org/jclouds/rest/binders/BindToXMLPayloadTest.java @@ -16,6 +16,7 @@ */ package org.jclouds.rest.binders; +import static org.assertj.core.api.Assertions.assertThat; import static org.testng.Assert.assertEquals; import javax.xml.bind.annotation.XmlRootElement; @@ -82,6 +83,13 @@ public class BindToXMLPayloadTest { request = binder.bindToRequest(request, new Object()); } + @Test + public void testJAXBParserBOM() throws Exception { + String input = "\uFEFF<test><elem>foo</elem></test>"; + TestJAXBDomain obj = xml.fromXML(input, TestJAXBDomain.class); + assertThat(obj.getElem()).isEqualTo("foo"); + } + @XmlRootElement(name = "test") public static class TestJAXBDomain { private String elem;
