Author: dkulp Date: Tue Dec 18 21:19:09 2012 New Revision: 1423662 URL: http://svn.apache.org/viewvc?rev=1423662&view=rev Log: Merged revisions 1423651 via git cherry-pick from https://svn.apache.org/repos/asf/camel/branches/camel-2.10.x
........ r1423651 | dkulp | 2012-12-18 16:12:27 -0500 (Tue, 18 Dec 2012) | 11 lines Merged revisions 1423645 via git cherry-pick from https://svn.apache.org/repos/asf/camel/trunk ........ r1423645 | dkulp | 2012-12-18 15:58:07 -0500 (Tue, 18 Dec 2012) | 3 lines [CAMEL-5877] Fix some issues converting to Source for CxfPayload Modified patch from Aki Yoshida applied ........ ........ Modified: camel/branches/camel-2.9.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java camel/branches/camel-2.9.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java camel/branches/camel-2.9.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterTest.java Modified: camel/branches/camel-2.9.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java?rev=1423662&r1=1423661&r2=1423662&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java (original) +++ camel/branches/camel-2.9.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java Tue Dec 18 21:19:09 2012 @@ -29,6 +29,7 @@ import javax.xml.stream.XMLStreamExcepti import javax.xml.stream.XMLStreamReader; import javax.xml.transform.Source; import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.sax.SAXSource; import javax.xml.transform.stax.StAXSource; import javax.xml.transform.stream.StreamSource; import javax.xml.ws.WebServiceProvider; @@ -915,7 +916,7 @@ public class CxfEndpoint extends Default } else if (source instanceof StAXSource) { StAXSource s = (StAXSource)source; r = s.getXMLStreamReader(); - } else if (source instanceof StreamSource) { + } else if (source instanceof StreamSource || source instanceof SAXSource) { //flip to stax so we can get the name r = StaxUtils.createXMLStreamReader(source); StaxSource src2 = new StaxSource(r); 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=1423662&r1=1423661&r2=1423662&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 Tue Dec 18 21:19:09 2012 @@ -17,6 +17,8 @@ package org.apache.camel.component.cxf.converter; import java.io.InputStream; +import java.io.Reader; +import java.io.StringReader; import java.util.ArrayList; import java.util.List; @@ -113,11 +115,32 @@ public final class CxfPayloadConverter { // 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); + Source src = null; + // many of the common format that can have a Source created directly + if (value instanceof InputStream) { + src = new StreamSource((InputStream)value); + } else if (value instanceof Reader) { + src = new StreamSource((Reader)value); + } else if (value instanceof String) { + src = new StreamSource(new StringReader((String)value)); + } else if (value instanceof Node) { + src = new DOMSource((Node)value); + } else if (value instanceof Source) { + src = (Source)src; + } + if (src == null) { + // assuming staxsource is preferred, otherwise use the one preferred + TypeConverter tc = registry.lookup(javax.xml.transform.stax.StAXSource.class, value.getClass()); + if (tc == null) { + tc = registry.lookup(Source.class, value.getClass()); + } + if (tc != null) { + src = tc.convertTo(Source.class, exchange, value); + } + } + if (src != null) { return (T) sourceToCxfPayload(src, exchange); - } + } } TypeConverter tc = registry.lookup(NodeList.class, value.getClass()); if (tc != null) { Modified: camel/branches/camel-2.9.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterTest.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterTest.java?rev=1423662&r1=1423661&r2=1423662&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterTest.java (original) +++ camel/branches/camel-2.9.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterTest.java Tue Dec 18 21:19:09 2012 @@ -93,7 +93,10 @@ public class CxfPayloadConverterTest ext exchange.getIn().setBody(inputStream); CxfPayload<?> payload = exchange.getIn().getBody(CxfPayload.class); assertTrue(payload instanceof CxfPayload); + assertEquals("Get a wrong size of body", 1, payload.getBodySources().size()); assertEquals("Get a wrong size of body", 1, payload.getBody().size()); + assertEquals("expects stream source", "streamsource", payload.getBodySources().get(0).getClass().getSimpleName().toLowerCase()); + } @Test
