Author: dkulp
Date: Mon Jul 16 16:53:52 2012
New Revision: 1362123
URL: http://svn.apache.org/viewvc?rev=1362123&view=rev
Log:
[CAMEL-5449] Try converting to Source first
Modified:
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java?rev=1362123&r1=1362122&r2=1362123&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
(original)
+++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
Mon Jul 16 16:53:52 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/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=1362123&r1=1362122&r2=1362123&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 16:53:52 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);
|