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:12:54 UTC

svn commit: r1362211 - in /camel/branches/camel-2.10.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:12:53 2012
New Revision: 1362211

URL: http://svn.apache.org/viewvc?rev=1362211&view=rev
Log:
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.10.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.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/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java?rev=1362211&r1=1362210&r2=1362211&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java (original)
+++ camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java Mon Jul 16 19:12:53 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.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=1362211&r1=1362210&r2=1362211&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 19:12:53 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));