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:11:29 UTC
svn commit: r1362210 - in /camel/trunk:
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:11:29 2012
New Revision: 1362210
URL: http://svn.apache.org/viewvc?rev=1362210&view=rev
Log:
[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/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java?rev=1362210&r1=1362209&r2=1362210&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java Mon Jul 16 19:11:29 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/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java?rev=1362210&r1=1362209&r2=1362210&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java (original)
+++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java Mon Jul 16 19:11:29 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));