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