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;
+    }
 }


Reply via email to