You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by dk...@apache.org on 2012/07/16 18:56:09 UTC

svn commit: r1362128 - in /camel/branches/camel-2.10.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf: CxfEndpoint.java converter/CxfPayloadConverter.java

Author: dkulp
Date: Mon Jul 16 16:56:09 2012
New Revision: 1362128

URL: http://svn.apache.org/viewvc?rev=1362128&view=rev
Log:
Merged revisions 1362123 via  git cherry-pick from
https://svn.apache.org/repos/asf/camel/trunk

........
  r1362123 | dkulp | 2012-07-16 12:53:52 -0400 (Mon, 16 Jul 2012) | 2 lines

  [CAMEL-5449] Try converting to Source first

........

Modified:
    camel/branches/camel-2.10.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
    camel/branches/camel-2.10.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java

Modified: camel/branches/camel-2.10.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java?rev=1362128&r1=1362127&r2=1362128&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java (original)
+++ camel/branches/camel-2.10.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java Mon Jul 16 16:56:09 2012
@@ -29,6 +29,7 @@ import javax.xml.stream.XMLStreamReader;
 import javax.xml.transform.Source;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stax.StAXSource;
+import javax.xml.transform.stream.StreamSource;
 import javax.xml.ws.WebServiceProvider;
 import javax.xml.ws.handler.Handler;
 
@@ -88,6 +89,7 @@ import org.apache.cxf.service.factory.Re
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.MessagePartInfo;
 import org.apache.cxf.staxutils.StaxSource;
+import org.apache.cxf.staxutils.StaxUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -916,6 +918,19 @@ public class CxfEndpoint extends Default
                     }
                 }
                 return r.getLocalName();
+            } else if (source instanceof StreamSource) {
+                //flip to stax so we can get the name
+                XMLStreamReader reader = StaxUtils.createXMLStreamReader(source);
+                StaxSource src2 = new StaxSource(reader);
+                sources.set(i, src2);
+                if (reader.getEventType() == XMLStreamReader.START_DOCUMENT) {
+                    try {
+                        reader.nextTag();
+                    } catch (XMLStreamException e) {
+                        //ignore
+                    }
+                }
+                return reader.getLocalName();
             }
             return null;
         }

Modified: camel/branches/camel-2.10.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java?rev=1362128&r1=1362127&r2=1362128&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java (original)
+++ camel/branches/camel-2.10.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java Mon Jul 16 16:56:09 2012
@@ -20,6 +20,8 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.xml.transform.Source;
+
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -65,6 +67,14 @@ public final class CxfPayloadConverter {
         }
         return new CxfPayload<T>(headers, body);
     }
+    
+    @Converter
+    public static <T> CxfPayload<T> sourceToCxfPayload(Source src, Exchange exchange) {
+        List<T> headers = new ArrayList<T>();
+        List<Source> body = new ArrayList<Source>();
+        body.add(src);
+        return new CxfPayload<T>(headers, body, null);
+    }
 
     @Converter
     public static <T> NodeList cxfPayloadToNodeList(CxfPayload<T> payload, Exchange exchange) {
@@ -87,6 +97,13 @@ public final class CxfPayloadConverter {
         // use fallback type converter, so we can probably convert into
         // CxfPayloads from other types
         if (type.isAssignableFrom(CxfPayload.class)) {
+            if (!value.getClass().isArray()) {
+                TypeConverter tc = registry.lookup(Source.class, value.getClass());
+                if (tc != null) {
+                    Source src = tc.convertTo(Source.class, exchange, value);
+                    return (T) sourceToCxfPayload(src, exchange);
+                }                
+            }
             TypeConverter tc = registry.lookup(NodeList.class, value.getClass());
             if (tc != null) {
                 NodeList nodeList = tc.convertTo(NodeList.class, exchange, value);