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));