You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/09/22 11:39:36 UTC
svn commit: r999836 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/impl/
components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/
components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/
components/camel-dozer/sr...
Author: davsclaus
Date: Wed Sep 22 09:39:36 2010
New Revision: 999836
URL: http://svn.apache.org/viewvc?rev=999836&view=rev
Log:
CAMEL-3143: Dozer is not OSGi compliant. OsgiTypeConverter is now a TypeConverterRegistry as well.
Added:
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/DozerTest.java
- copied, changed from r999771, camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jms/JmsTest.java
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/model/
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/model/Address.java
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/model/Customer.java
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/service/
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/service/Customer.java
camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/dozer/
camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/dozer/CamelContext.xml
- copied, changed from r999771, camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/jms/CamelContext.xml
camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/dozer/dozer-mapping.xml
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java
camel/trunk/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java
camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/SpringDozerTypeConverterTest.java
camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/model/Address.java
camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/model/Customer.java
camel/trunk/components/camel-dozer/src/test/resources/application-context.xml
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=999836&r1=999835&r2=999836&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Wed Sep 22 09:39:36 2010
@@ -872,9 +872,8 @@ public class DefaultCamelContext extends
if (typeConverter == null) {
getTypeConverter();
}
- // type converter is usually the default one that also is the registry
- if (typeConverter instanceof DefaultTypeConverter) {
- typeConverterRegistry = (DefaultTypeConverter) typeConverter;
+ if (typeConverter instanceof TypeConverterRegistry) {
+ typeConverterRegistry = (TypeConverterRegistry) typeConverter;
}
}
return typeConverterRegistry;
Modified: camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java?rev=999836&r1=999835&r2=999836&view=diff
==============================================================================
--- camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java (original)
+++ camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java Wed Sep 22 09:39:36 2010
@@ -27,6 +27,7 @@ import org.apache.camel.impl.ServiceSupp
import org.apache.camel.impl.converter.DefaultTypeConverter;
import org.apache.camel.impl.converter.TypeConverterLoader;
import org.apache.camel.spi.Injector;
+import org.apache.camel.spi.TypeConverterRegistry;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.osgi.framework.BundleContext;
@@ -34,14 +35,14 @@ import org.osgi.framework.ServiceReferen
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
-public class OsgiTypeConverter extends ServiceSupport implements TypeConverter, ServiceTrackerCustomizer {
+public class OsgiTypeConverter extends ServiceSupport implements TypeConverter, TypeConverterRegistry, ServiceTrackerCustomizer {
private static final Log LOG = LogFactory.getLog(OsgiTypeConverter.class);
private final BundleContext bundleContext;
private final Injector injector;
private final ServiceTracker tracker;
- private volatile DefaultTypeConverter registry;
+ private volatile DefaultTypeConverter delegate;
public OsgiTypeConverter(BundleContext bundleContext, Injector injector) {
this.bundleContext = bundleContext;
@@ -52,7 +53,7 @@ public class OsgiTypeConverter extends S
public Object addingService(ServiceReference serviceReference) {
TypeConverterLoader loader = (TypeConverterLoader) bundleContext.getService(serviceReference);
try {
- loader.load(getRegistry());
+ loader.load(getDelegate());
} catch (Throwable t) {
LOG.debug("Error while loading type converter", t);
}
@@ -63,7 +64,7 @@ public class OsgiTypeConverter extends S
}
public void removedService(ServiceReference serviceReference, Object o) {
- this.registry = null;
+ this.delegate = null;
}
@Override
@@ -74,39 +75,60 @@ public class OsgiTypeConverter extends S
@Override
protected void doStop() throws Exception {
this.tracker.close();
- this.registry = null;
+ this.delegate = null;
}
public <T> T convertTo(Class<T> type, Object value) {
- return getRegistry().convertTo(type, value);
+ return getDelegate().convertTo(type, value);
}
public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
- return getRegistry().convertTo(type, exchange, value);
+ return getDelegate().convertTo(type, exchange, value);
}
public <T> T mandatoryConvertTo(Class<T> type, Object value) throws NoTypeConversionAvailableException {
- return getRegistry().mandatoryConvertTo(type, value);
+ return getDelegate().mandatoryConvertTo(type, value);
}
public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) throws NoTypeConversionAvailableException {
- return getRegistry().mandatoryConvertTo(type, exchange, value);
+ return getDelegate().mandatoryConvertTo(type, exchange, value);
}
- public DefaultTypeConverter getRegistry() {
- if (registry == null) {
+ public void addTypeConverter(Class<?> toType, Class<?> fromType, TypeConverter typeConverter) {
+ getDelegate().addTypeConverter(toType, fromType, typeConverter);
+ }
+
+ public void addFallbackTypeConverter(TypeConverter typeConverter, boolean canPromote) {
+ getDelegate().addFallbackTypeConverter(typeConverter, canPromote);
+ }
+
+ public TypeConverter lookup(Class<?> toType, Class<?> fromType) {
+ return getDelegate().lookup(toType, fromType);
+ }
+
+ public void setInjector(Injector injector) {
+ getDelegate().setInjector(injector);
+ }
+
+ public Injector getInjector() {
+ return getDelegate().getInjector();
+ }
+
+ public DefaultTypeConverter getDelegate() {
+ if (delegate == null) {
synchronized (this) {
- if (registry != null) {
- return registry;
+ if (delegate != null) {
+ return delegate;
} else {
- registry = createRegistry();
+ delegate = createRegistry();
}
}
}
- return registry;
+ return delegate;
}
protected DefaultTypeConverter createRegistry() {
+ // base the osgi type converter on the default type converter
DefaultTypeConverter reg = new DefaultTypeConverter(new DefaultPackageScanClassResolver() {
@Override
public Set<ClassLoader> getClassLoaders() {
@@ -126,5 +148,4 @@ public class OsgiTypeConverter extends S
return reg;
}
-
}
Modified: camel/trunk/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java?rev=999836&r1=999835&r2=999836&view=diff
==============================================================================
--- camel/trunk/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java (original)
+++ camel/trunk/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java Wed Sep 22 09:39:36 2010
@@ -16,7 +16,10 @@
*/
package org.apache.camel.converter.dozer;
+import java.net.URL;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.apache.camel.CamelContext;
@@ -28,13 +31,14 @@ import org.apache.commons.logging.LogFac
import org.dozer.DozerBeanMapper;
import org.dozer.Mapper;
import org.dozer.classmap.ClassMap;
-import org.dozer.loader.CustomMappingsLoader;
-import org.dozer.loader.LoadMappingsResult;
+import org.dozer.classmap.MappingFileData;
+import org.dozer.loader.xml.MappingFileReader;
+import org.dozer.loader.xml.XMLParserFactory;
/**
* <code>DozerTypeConverterLoader</code> provides the mechanism for registering
* a Dozer {@link Mapper} as {@link TypeConverter} for a {@link CamelContext}.
- * <p>
+ * <p/>
* While a mapper can be explicitly supplied as a parameter the
* {@link CamelContext}'s registry will also be searched for {@link Mapper}
* instances. A {@link DozerTypeConverter} is created to wrap each
@@ -61,7 +65,7 @@ public class DozerTypeConverterLoader im
* register as a {@link TypeConverter} with the context
*
* @param camelContext the context to register the
- * {@link DozerTypeConverter} in
+ * {@link DozerTypeConverter} in
*/
public DozerTypeConverterLoader(CamelContext camelContext) {
init(camelContext, null);
@@ -73,8 +77,8 @@ public class DozerTypeConverterLoader im
* with the given context. It will also search the context for
*
* @param camelContext the context to register the
- * {@link DozerTypeConverter} in
- * @param mapper the DozerMapperBean to be wrapped as a type converter.
+ * {@link DozerTypeConverter} in
+ * @param mapper the DozerMapperBean to be wrapped as a type converter.
*/
public DozerTypeConverterLoader(CamelContext camelContext, DozerBeanMapper mapper) {
init(camelContext, mapper);
@@ -85,8 +89,8 @@ public class DozerTypeConverterLoader im
* with the {@link CamelContext}.
*
* @param camelContext the context to register the
- * {@link DozerTypeConverter} in
- * @param mapper the DozerMapperBean to be wrapped as a type converter.
+ * {@link DozerTypeConverter} in
+ * @param mapper the DozerMapperBean to be wrapped as a type converter.
*/
public void init(CamelContext camelContext, DozerBeanMapper mapper) {
this.camelContext = camelContext;
@@ -94,29 +98,39 @@ public class DozerTypeConverterLoader im
if (mapper != null) {
mappers.put("parameter", mapper);
}
- if (mappers.size() > 0) {
- log.warn("Loaded %d dozer mappers from Camel's registry. Dozer is most efficient when there is a single mapper instance. Consider amalgamating instances.");
+ if (mappers.size() > 1) {
+ log.warn("Loaded " + mappers.size() + " Dozer mappers from Camel registry."
+ + " Dozer is most efficient when there is a single mapper instance. Consider amalgamating instances.");
+ } else if (mappers.size() == 0) {
+ log.warn("No Dozer mappers found in Camel registry. You should add Dozer mappers as beans to the registry of the type: " + DozerBeanMapper.class.getName());
}
TypeConverterRegistry registry = camelContext.getTypeConverterRegistry();
for (DozerBeanMapper dozer : mappers.values()) {
- Map<String, ClassMap> all = loadMappings(dozer);
+ List<ClassMap> all = loadMappings(camelContext, dozer);
DozerTypeConverter converter = new DozerTypeConverter(dozer);
- for (ClassMap map : all.values()) {
+ for (ClassMap map : all) {
+ if (log.isInfoEnabled()) {
+ log.info("Added " + map.getSrcClassName() + " -> " + map.getDestClassName() + " as type converter to: " + registry);
+ }
registry.addTypeConverter(map.getSrcClassToMap(), map.getDestClassToMap(), converter);
registry.addTypeConverter(map.getDestClassToMap(), map.getSrcClassToMap(), converter);
}
}
}
- private Map<String, ClassMap> loadMappings(DozerBeanMapper mapper) {
- // TODO: This is a little wasteful as dozer has already parsed this
- // information, if does not expose it though so it must be done again.
- // Create a patch for Dozer to expose this.
- CustomMappingsLoader customMappingsLoader = new CustomMappingsLoader();
- LoadMappingsResult loadMappingsResult = customMappingsLoader.load(mapper.getMappingFiles());
- Map<String, ClassMap> all = loadMappingsResult.getCustomMappings().getAll();
- return all;
+ private List<ClassMap> loadMappings(CamelContext camelContext, DozerBeanMapper mapper) {
+ List<ClassMap> answer = new ArrayList<ClassMap>();
+
+ // load the class map using the class resolver so we can load from classpath in OSGi
+ MappingFileReader reader = new MappingFileReader(XMLParserFactory.getInstance());
+ for (String name : mapper.getMappingFiles()) {
+ URL url = camelContext.getClassResolver().loadResourceAsURL(name);
+ MappingFileData data = reader.read(url);
+ answer.addAll(data.getClassMaps());
+ }
+
+ return answer;
}
public CamelContext getCamelContext() {
Modified: camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java?rev=999836&r1=999835&r2=999836&view=diff
==============================================================================
--- camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java (original)
+++ camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java Wed Sep 22 09:39:36 2010
@@ -16,8 +16,6 @@
*/
package org.apache.camel.converter.dozer;
-import java.util.concurrent.TimeUnit;
-
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.converter.dozer.service.Customer;
@@ -33,14 +31,12 @@ public class DozerTypeConverterTest exte
@Override
public void setUp() throws Exception {
super.setUp();
-
new DozerTypeConverterLoader(context, createMapper());
}
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
-
@Override
public void configure() throws Exception {
from("direct:service-in").bean(new CustomerProcessor()).to("mock:verify-model");
@@ -52,14 +48,14 @@ public class DozerTypeConverterTest exte
public void verifyCamelConversionViaDozer() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:verify-model");
mock.expectedMessageCount(1);
+
template.sendBody("direct:service-in", createServiceCustomer());
- mock.await(5, TimeUnit.SECONDS);
- mock.assertIsSatisfied();
+
+ assertMockEndpointsSatisfied();
}
@Test
public void verifyCustomerMapping() throws Exception {
-
Mapper mapper = DozerTestArtifactsFactory.createMapper();
Customer service = createServiceCustomer();
org.apache.camel.converter.dozer.model.Customer model = mapper.map(service, org.apache.camel.converter.dozer.model.Customer.class);
@@ -67,5 +63,4 @@ public class DozerTypeConverterTest exte
assertEquals(service, roundTrip);
}
-
}
Modified: camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/SpringDozerTypeConverterTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/SpringDozerTypeConverterTest.java?rev=999836&r1=999835&r2=999836&view=diff
==============================================================================
--- camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/SpringDozerTypeConverterTest.java (original)
+++ camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/SpringDozerTypeConverterTest.java Wed Sep 22 09:39:36 2010
@@ -16,8 +16,6 @@
*/
package org.apache.camel.converter.dozer;
-import java.util.concurrent.TimeUnit;
-
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelSpringTestSupport;
import org.junit.Test;
@@ -37,8 +35,9 @@ public class SpringDozerTypeConverterTes
public void verifyCamelConversionViaDozer() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:verify-model");
mock.expectedMessageCount(1);
+
template.sendBody("direct:service-in", createServiceCustomer());
- mock.await(5, TimeUnit.SECONDS);
- mock.assertIsSatisfied();
+
+ assertMockEndpointsSatisfied();
}
}
Modified: camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/model/Address.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/model/Address.java?rev=999836&r1=999835&r2=999836&view=diff
==============================================================================
--- camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/model/Address.java (original)
+++ camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/model/Address.java Wed Sep 22 09:39:36 2010
@@ -23,14 +23,12 @@ import org.apache.commons.lang.builder.T
public class Address {
private String zipCode;
-
private String streetName;
public Address() {
}
public Address(String zipCode, String streetName) {
-
this.zipCode = zipCode;
this.streetName = streetName;
}
Modified: camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/model/Customer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/model/Customer.java?rev=999836&r1=999835&r2=999836&view=diff
==============================================================================
--- camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/model/Customer.java (original)
+++ camel/trunk/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/model/Customer.java Wed Sep 22 09:39:36 2010
@@ -21,10 +21,9 @@ import org.apache.commons.lang.builder.H
import org.apache.commons.lang.builder.ToStringBuilder;
public class Customer {
- private String firstName;
+ private String firstName;
private String lastName;
-
private Address address;
public Customer() {
@@ -75,5 +74,4 @@ public class Customer {
return ToStringBuilder.reflectionToString(this);
}
-
}
Modified: camel/trunk/components/camel-dozer/src/test/resources/application-context.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-dozer/src/test/resources/application-context.xml?rev=999836&r1=999835&r2=999836&view=diff
==============================================================================
--- camel/trunk/components/camel-dozer/src/test/resources/application-context.xml (original)
+++ camel/trunk/components/camel-dozer/src/test/resources/application-context.xml Wed Sep 22 09:39:36 2010
@@ -16,25 +16,26 @@
limitations under the License.
-->
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
-
- <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
- <route>
- <from uri="direct:service-in" />
- <to uri="bean:customer-processor" />
- <to uri="mock:verify-model" />
- </route>
- </camelContext>
-
- <bean id="customer-processor" class="org.apache.camel.converter.dozer.CustomerProcessor" />
- <bean id="dozerConverterLoader" class="org.apache.camel.converter.dozer.DozerTypeConverterLoader" />
-
- <bean id="mapper" class="org.dozer.DozerBeanMapper">
- <property name="mappingFiles">
- <list>
- <value>mapping.xml</value>
- </list>
- </property>
- </bean>
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+ <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+ <route>
+ <from uri="direct:service-in"/>
+ <to uri="bean:customer-processor"/>
+ <to uri="mock:verify-model"/>
+ </route>
+ </camelContext>
+
+ <bean id="customer-processor" class="org.apache.camel.converter.dozer.CustomerProcessor"/>
+ <bean id="dozerConverterLoader" class="org.apache.camel.converter.dozer.DozerTypeConverterLoader"/>
+
+ <bean id="mapper" class="org.dozer.DozerBeanMapper">
+ <property name="mappingFiles">
+ <list>
+ <value>mapping.xml</value>
+ </list>
+ </property>
+ </bean>
</beans>
\ No newline at end of file
Copied: camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/DozerTest.java (from r999771, camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jms/JmsTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/DozerTest.java?p2=camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/DozerTest.java&p1=camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jms/JmsTest.java&r1=999771&r2=999836&rev=999836&view=diff
==============================================================================
--- camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jms/JmsTest.java (original)
+++ camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/DozerTest.java Wed Sep 22 09:39:36 2010
@@ -14,9 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.itest.osgi.jms;
+package org.apache.camel.itest.osgi.dozer;
+import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.itest.osgi.OSGiIntegrationSpringTestSupport;
+import org.apache.camel.itest.osgi.dozer.service.Customer;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Option;
@@ -35,18 +38,33 @@ import static org.ops4j.pax.exam.contain
* @version $Revision$
*/
@RunWith(JUnit4TestRunner.class)
-public class JmsTest extends OSGiIntegrationSpringTestSupport {
+@Ignore("Dozer does not work in OSGi")
+public class DozerTest extends OSGiIntegrationSpringTestSupport {
@Override
protected OsgiBundleXmlApplicationContext createApplicationContext() {
- return new OsgiBundleXmlApplicationContext(new String[]{"org/apache/camel/itest/osgi/jms/CamelContext.xml"});
+ return new OsgiBundleXmlApplicationContext(new String[]{"org/apache/camel/itest/osgi/dozer/CamelContext.xml"});
}
@Test
- public void testJms() throws Exception {
- getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+ public void testDozer() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ // should be the model customer
+ mock.message(0).body().isInstanceOf(org.apache.camel.itest.osgi.dozer.model.Customer.class);
+ // and assert the model contains the expected data
+ mock.message(0).simple("${body.firstName} == Homer");
+ mock.message(0).simple("${body.lastName} == Simpson");
+ mock.message(0).simple("${body.address.streetMame} == 'Somestreet 123'");
+ mock.message(0).simple("${body.address.zipCode} == 26000");
+
+ Customer serviceCustomer = new Customer();
+ serviceCustomer.setFirstName("Homer");
+ serviceCustomer.setLastName("Simpson");
+ serviceCustomer.setStreet("Somestreet 123");
+ serviceCustomer.setZip("26000");
- template.sendBody("activemq:queue:foo", "Hello World");
+ template.sendBody("direct:start", serviceCustomer);
assertMockEndpointsSatisfied();
}
@@ -60,12 +78,9 @@ public class JmsTest extends OSGiIntegra
// this is how you set the default log level when using pax logging (logProfile)
org.ops4j.pax.exam.CoreOptions.systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("INFO"),
- // using the features to install AMQ
- scanFeatures("mvn:org.apache.activemq/activemq-karaf/5.4.0/xml/features", "activemq"),
-
// using the features to install the camel components
scanFeatures(getCamelKarafFeatureUrl(),
- "camel-core", "camel-spring", "camel-test", "camel-jms"),
+ "camel-core", "camel-spring", "camel-test", "camel-dozer"),
workingDirectory("target/paxrunner/"),
Added: camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/model/Address.java
URL: http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/model/Address.java?rev=999836&view=auto
==============================================================================
--- camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/model/Address.java (added)
+++ camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/model/Address.java Wed Sep 22 09:39:36 2010
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.itest.osgi.dozer.model;
+
+/**
+ * @version $Revision$
+ */
+public class Address {
+
+ private String zipCode;
+ private String streetName;
+
+ public String getZipCode() {
+ return zipCode;
+ }
+
+ public void setZipCode(String zipCode) {
+ this.zipCode = zipCode;
+ }
+
+ public String getStreetName() {
+ return streetName;
+ }
+
+ public void setStreetName(String streetName) {
+ this.streetName = streetName;
+ }
+
+}
Added: camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/model/Customer.java
URL: http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/model/Customer.java?rev=999836&view=auto
==============================================================================
--- camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/model/Customer.java (added)
+++ camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/model/Customer.java Wed Sep 22 09:39:36 2010
@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.itest.osgi.dozer.model;
+
+/**
+ * @version $Revision$
+ */
+public class Customer {
+
+ private String firstName;
+ private String lastName;
+ private Address address;
+
+ public Customer() {
+ }
+
+ public Customer(String firstName, String lastName, Address address) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.address = address;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public Address getAddress() {
+ return address;
+ }
+
+ public void setAddress(Address address) {
+ this.address = address;
+ }
+
+}
Added: camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/service/Customer.java
URL: http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/service/Customer.java?rev=999836&view=auto
==============================================================================
--- camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/service/Customer.java (added)
+++ camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/dozer/service/Customer.java Wed Sep 22 09:39:36 2010
@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.itest.osgi.dozer.service;
+
+/**
+ * @version $Revision$
+ */
+public class Customer {
+
+ private String firstName;
+ private String lastName;
+ private String street;
+ private String zip;
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getStreet() {
+ return street;
+ }
+
+ public void setStreet(String street) {
+ this.street = street;
+ }
+
+ public String getZip() {
+ return zip;
+ }
+
+ public void setZip(String zip) {
+ this.zip = zip;
+ }
+
+}
Copied: camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/dozer/CamelContext.xml (from r999771, camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/jms/CamelContext.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/dozer/CamelContext.xml?p2=camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/dozer/CamelContext.xml&p1=camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/jms/CamelContext.xml&r1=999771&r2=999836&rev=999836&view=diff
==============================================================================
--- camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/jms/CamelContext.xml (original)
+++ camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/dozer/CamelContext.xml Wed Sep 22 09:39:36 2010
@@ -25,16 +25,20 @@
<camelContext xmlns="http://camel.apache.org/schema/spring">
<camel:route>
- <camel:from uri="activemq:queue:foo"/>
+ <camel:from uri="direct:start"/>
+ <!-- convert the body to the model which should involve Dozer -->
+ <camel:convertBodyTo type="org.apache.camel.itest.osgi.dozer.model.Customer"/>
<camel:to uri="mock:result"/>
</camel:route>
</camelContext>
- <bean id="activemq" class="org.apache.camel.component.jms.JmsComponent">
- <property name="connectionFactory">
- <bean class="org.apache.activemq.ActiveMQConnectionFactory">
- <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
- </bean>
+ <bean id="dozerConverterLoader" class="org.apache.camel.converter.dozer.DozerTypeConverterLoader"/>
+
+ <bean id="mapper" class="org.dozer.DozerBeanMapper">
+ <property name="mappingFiles">
+ <list>
+ <value>org/apache/camel/itest/osgi/dozer/dozer-mapping.xml</value>
+ </list>
</property>
</bean>
Added: camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/dozer/dozer-mapping.xml
URL: http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/dozer/dozer-mapping.xml?rev=999836&view=auto
==============================================================================
--- camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/dozer/dozer-mapping.xml (added)
+++ camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/dozer/dozer-mapping.xml Wed Sep 22 09:39:36 2010
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
+ <mapping>
+ <class-a>org.apache.camel.itest.osgi.dozer.service.Customer</class-a>
+ <class-b>org.apache.camel.itest.osgi.dozer.model.Customer</class-b>
+ <field>
+ <a>street</a>
+ <b>address.streetName</b>
+ </field>
+ <field>
+ <a>zip</a>
+ <b>address.zipCode</b>
+ </field>
+ </mapping>
+</mappings>
\ No newline at end of file