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 21:14:14 UTC

svn commit: r1362215 - in /camel/branches/camel-2.9.x: camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java

Author: dkulp
Date: Mon Jul 16 19:14:14 2012
New Revision: 1362215

URL: http://svn.apache.org/viewvc?rev=1362215&view=rev
Log:
Merged revisions 1362211 via  git cherry-pick from
https://svn.apache.org/repos/asf/camel/branches/camel-2.10.x

........
  r1362211 | dkulp | 2012-07-16 15:12:53 -0400 (Mon, 16 Jul 2012) | 12 lines

  Merged revisions 1362210 via  git cherry-pick from
  https://svn.apache.org/repos/asf/camel/trunk

  ........
    r1362210 | dkulp | 2012-07-16 15:11:29 -0400 (Mon, 16 Jul 2012) | 4 lines

    [CXF-5449] Provide a direct CxfPayload -> Source conversion so XSLT
    component can bypass the current CxfPayload(StaxSource) -> NodeList ->
    DOMSource -> InputStream -> StreamSource thing it currently does.

  ........

........

Modified:
    camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
    camel/branches/camel-2.9.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java

Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java?rev=1362215&r1=1362214&r2=1362215&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java Mon Jul 16 19:14:14 2012
@@ -47,6 +47,7 @@ import org.apache.camel.ExpectedBodyType
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeTransformException;
+import org.apache.camel.TypeConverter;
 import org.apache.camel.converter.jaxp.XmlConverter;
 import org.apache.camel.converter.jaxp.XmlErrorListener;
 import org.apache.camel.support.SynchronizationAdapter;
@@ -424,8 +425,10 @@ public class XsltBuilder implements Proc
             return false;
         } else if (body instanceof Node) {
             return false;
+        } else if (exchange.getContext().getTypeConverterRegistry().lookup(Source.class, body.getClass()) != null) {
+            //there is a direct and hopefully optimized converter to Source 
+            return false;
         }
-
         // yes an input stream is needed
         return true;
     }
@@ -446,9 +449,15 @@ public class XsltBuilder implements Proc
         if (body instanceof Source) {
             return (Source) body;
         }
-
         Source source = null;
-        if (isAllowStAX()) {
+        if (body != null) {
+            TypeConverter tc = exchange.getContext().getTypeConverterRegistry().lookup(Source.class, body.getClass());
+            if (tc != null) {
+                source = tc.convertTo(Source.class, body);
+            }
+        }
+
+        if (source == null && isAllowStAX()) {
             source = exchange.getContext().getTypeConverter().tryConvertTo(StAXSource.class, exchange, body);
         }
         if (source == null) {

Modified: camel/branches/camel-2.9.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.9.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java?rev=1362215&r1=1362214&r2=1362215&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java (original)
+++ camel/branches/camel-2.9.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java Mon Jul 16 19:14:14 2012
@@ -90,6 +90,16 @@ public final class CxfPayloadConverter {
         }
         return null;
     }
+    
+    @Converter
+    public static <T> Source cxfPayLoadToSource(CxfPayload<T> payload, Exchange exchange) {
+        List<Source> payloadBody = payload.getBodySources();
+        
+        if (payloadBody.size() > 0) {
+            return payloadBody.get(0);
+        }
+        return null;
+    }
 
     @SuppressWarnings("unchecked")
     @FallbackConverter
@@ -130,6 +140,14 @@ public final class CxfPayloadConverter {
         }
         // Convert a CxfPayload into something else
         if (CxfPayload.class.isAssignableFrom(value.getClass())) {
+            CxfPayload<?> payload = (CxfPayload<?>) value;
+            
+            if (payload.getBodySources().size() == 1) {
+                TypeConverter tc = registry.lookup(type, Source.class);
+                if (tc != null) {
+                    return tc.convertTo(type, payload.getBodySources().get(0));
+                }                
+            }
             TypeConverter tc = registry.lookup(type, NodeList.class);
             if (tc != null) {
                 return tc.convertTo(type, cxfPayloadToNodeList((CxfPayload<?>) value, exchange));