Hi Claus, The code in CxfMessage#getBody was checking if a message body was a org.apache.cxf.message.MessageContentList. If so, it extracted the first element and applied converter to the first element. That piece of logic now resides in the CxfConverter.convertTo, which is a FallbackConverter. Let me know if I am missing something,
Thanks, William On Fri, Jan 30, 2009 at 12:23 AM, Claus Ibsen <claus.ib...@gmail.com> wrote: > Hi Willem > > There might be some left overs still there. I remember Jiang added > something to CxfMessage#getBody (or someplace like that) that would > kinda do something like that below. > > Maybe that code is still there? > > There is a ticket in JIRA somewhere about it, I can find it if you > need it. Ticket reported by me on camel-cxf and fixed by Jiang. > > > > On Thu, Jan 29, 2009 at 9:35 PM, <w...@apache.org> wrote: >> Author: wtam >> Date: Thu Jan 29 20:35:54 2009 >> New Revision: 738999 >> >> URL: http://svn.apache.org/viewvc?rev=738999&view=rev >> Log: >> use FallbackConverter in camel-cxf component, which means we can get rid of >> CxfMessage and CxfExchange class. Very cool. >> >> Removed: >> >> camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfExchange.java >> >> camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfMessage.java >> 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/CxfConverter.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=738999&r1=738998&r2=738999&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 >> Thu Jan 29 20:35:54 2009 >> @@ -25,8 +25,6 @@ >> import org.apache.camel.CamelContext; >> import org.apache.camel.CamelException; >> import org.apache.camel.Consumer; >> -import org.apache.camel.Exchange; >> -import org.apache.camel.ExchangePattern; >> import org.apache.camel.HeaderFilterStrategyAware; >> import org.apache.camel.Processor; >> import org.apache.camel.Producer; >> @@ -97,11 +95,6 @@ >> return new CxfConsumer(this, processor); >> } >> >> - @Override >> - public Exchange createExchange(ExchangePattern pattern) { >> - return new CxfExchange(this, pattern); >> - } >> - >> public boolean isSingleton() { >> return true; >> } >> >> Modified: >> camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfConverter.java >> URL: >> http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfConverter.java?rev=738999&r1=738998&r2=738999&view=diff >> ============================================================================== >> --- >> camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfConverter.java >> (original) >> +++ >> camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfConverter.java >> Thu Jan 29 20:35:54 2009 >> @@ -22,9 +22,13 @@ >> >> import org.apache.camel.Converter; >> import org.apache.camel.Endpoint; >> +import org.apache.camel.Exchange; >> +import org.apache.camel.FallbackConverter; >> +import org.apache.camel.TypeConverter; >> import org.apache.camel.component.cxf.CxfSpringEndpoint; >> import org.apache.camel.component.cxf.DataFormat; >> import >> org.apache.camel.component.cxf.spring.CxfEndpointBeanDefinitionParser.CxfSpringEndpointBean; >> +import org.apache.camel.spi.TypeConverterRegistry; >> import org.apache.camel.spring.SpringCamelContext; >> import org.apache.commons.logging.Log; >> import org.apache.commons.logging.LogFactory; >> @@ -89,4 +93,41 @@ >> return DataFormat.valueOf(name.toUpperCase()); >> } >> >> + /** >> + * Use a fallback type converter so we can convert the embedded list >> element >> + * if the value is MessageContentsList. The algorithm of this converter >> + * finds the first non-null list element from the list and applies >> convertion >> + * to the list element. >> + * >> + * @param type the desired type to be converted to >> + * @param exchange optional exchange which can be null >> + * @param value the object to be converted >> + * @param registry type converter registry >> + * @return the converted value of the desired type or null if no >> suitable converter found >> + */ >> + @FallbackConverter >> + public static <T> T convertTo(Class<T> type, Exchange exchange, Object >> value, >> + TypeConverterRegistry registry) { >> + >> + if (MessageContentsList.class.isAssignableFrom(value.getClass())) { >> + MessageContentsList list = (MessageContentsList)value; >> + >> + for (int i = 0; i < list.size(); i++) { >> + Object embedded = list.get(i); >> + >> + if (embedded != null) { >> + if (type.isInstance(embedded)) { >> + return (T)embedded; >> + } else { >> + TypeConverter tc = registry.lookup(type, >> embedded.getClass()); >> + if (tc != null) { >> + return tc.convertTo(type, exchange, embedded); >> + } >> + } >> + } >> + } >> + } >> + >> + return null; >> + } >> } >> >> >> > > > > -- > Claus Ibsen > Apache Camel Committer > > Open Source Integration: http://fusesource.com > Blog: http://davsclaus.blogspot.com/ >