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/
>

Reply via email to