You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ay...@apache.org on 2016/06/21 08:16:39 UTC

camel git commit: CAMEL-10080 CxfPayloadConverter to use a XMLStreamReader based conversion if applicable

Repository: camel
Updated Branches:
  refs/heads/master 84e6b76bd -> da0fc7bff


CAMEL-10080 CxfPayloadConverter to use a XMLStreamReader based conversion if applicable


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/da0fc7bf
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/da0fc7bf
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/da0fc7bf

Branch: refs/heads/master
Commit: da0fc7bffac1f369697ba20796e3c4343d349754
Parents: 84e6b76
Author: Akitoshi Yoshida <ay...@apache.org>
Authored: Tue Jun 21 10:16:09 2016 +0200
Committer: Akitoshi Yoshida <ay...@apache.org>
Committed: Tue Jun 21 10:16:33 2016 +0200

----------------------------------------------------------------------
 .../component/cxf/converter/CxfPayloadConverter.java  | 14 +++++++++++---
 .../cxf/converter/CxfPayloadConverterTest.java        | 13 +++++++++++++
 2 files changed, 24 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/da0fc7bf/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
index 74e0d10..196dbce 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
@@ -195,7 +195,16 @@ public final class CxfPayloadConverter {
                 if (type.isInstance(s)) {
                     return type.cast(s);
                 }
-                TypeConverter tc = registry.lookup(type, Source.class);
+                TypeConverter tc = registry.lookup(type, XMLStreamReader.class);
+                if (tc != null && (s instanceof StaxSource || s instanceof StAXSource)) {
+                    XMLStreamReader r = (s instanceof StAXSource)
+                            ? ((StAXSource)s).getXMLStreamReader() : ((StaxSource) s).getXMLStreamReader();
+                    if (payload.getNsMap() != null) {
+                        r = new DelegatingXMLStreamReader(r, payload.getNsMap());
+                    }
+                    return (T)tc.convertTo(type, r);
+                }
+                tc = registry.lookup(type, Source.class);
                 if (tc != null) {
                     XMLStreamReader r = null;
                     if (payload.getNsMap() != null) {
@@ -208,8 +217,7 @@ public final class CxfPayloadConverter {
                             s = new StAXSource(new DelegatingXMLStreamReader(r, payload.getNsMap()));
                         }
                     }
-                    T t = tc.convertTo(type, s);
-                    return t;
+                    return (T)tc.convertTo(type, s);
                 }
             }
             TypeConverter tc = registry.lookup(type, NodeList.class);

http://git-wip-us.apache.org/repos/asf/camel/blob/da0fc7bf/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterTest.java
index 5bf636f..8e2d46c 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterTest.java
@@ -27,6 +27,7 @@ import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.transform.Source;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.sax.SAXSource;
+import javax.xml.transform.stax.StAXSource;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -36,6 +37,7 @@ import org.w3c.dom.NodeList;
 import org.apache.camel.StreamCache;
 import org.apache.camel.component.cxf.CxfPayload;
 import org.apache.camel.test.junit4.ExchangeTestSupport;
+import org.apache.cxf.staxutils.StaxUtils;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -43,6 +45,7 @@ public class CxfPayloadConverterTest extends ExchangeTestSupport {
     private Document document;
     private CxfPayload<String[]> payload;
     private CxfPayload<String[]> emptyPayload;
+    private CxfPayload<String[]> staxpayload;
     private FileInputStream inputStream;
 
     @Override
@@ -62,8 +65,11 @@ public class CxfPayloadConverterTest extends ExchangeTestSupport {
         document.getDocumentElement().normalize();
         List<Source> body = new ArrayList<Source>();
         body.add(new DOMSource(document.getDocumentElement()));
+        List<Source> staxbody = new ArrayList<Source>();
+        staxbody.add(new StAXSource(StaxUtils.createXMLStreamReader(new FileInputStream(file), "utf-8")));
         payload = new CxfPayload<String[]>(new ArrayList<String[]>(), body, null);
         emptyPayload = new CxfPayload<String[]>(new ArrayList<String[]>(), new ArrayList<Source>(), null);
+        staxpayload = new CxfPayload<String[]>(new ArrayList<String[]>(), staxbody, null);
         inputStream = new FileInputStream(file);
     }
 
@@ -115,6 +121,13 @@ public class CxfPayloadConverterTest extends ExchangeTestSupport {
     }
 
     @Test
+    public void testFromCxfStAXPayload() {
+        exchange.getIn().setBody(staxpayload);
+        InputStream inputStream = exchange.getIn().getBody(InputStream.class);
+        assertTrue(inputStream instanceof InputStream);
+    }
+
+    @Test
     public void testCxfPayloadToNode() {
         // call the payload conversion that works
         exchange.getIn().setBody(payload);