On Fri, Jan 30, 2009 at 7:04 AM, William Tam <email.w...@gmail.com> wrote:
> 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
Great I kinda forgot from the commit log that you deleted 2 files. The
content of these files is not logged :)
And I just wanted to raise a flag in case there was still something in
the CXF that should be looked at.




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



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/

Reply via email to