You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2017/07/27 17:42:04 UTC

jclouds git commit: JCLOUDS-1325: Ignore Unicode BOM in XML parser

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 <ga...@apache.org>
Authored: Sun Jul 23 19:08:26 2017 -0700
Committer: Andrew Gaul <ga...@apache.org>
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;