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/

Reply via email to