Repository: camel
Updated Branches:
  refs/heads/camel-2.17.x 0bfc8a263 -> 88c605bfa


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/88c605bf
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/88c605bf
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/88c605bf

Branch: refs/heads/camel-2.17.x
Commit: 88c605bfae044b7fd9da3e83aeff3148c9f46938
Parents: 0bfc8a2
Author: Akitoshi Yoshida <a...@apache.org>
Authored: Tue Jun 21 10:16:09 2016 +0200
Committer: Akitoshi Yoshida <a...@apache.org>
Committed: Tue Jun 21 12:25:19 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/88c605bf/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/88c605bf/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);

Reply via email to