Author: gnodet Date: Thu Jun 18 09:07:57 2009 New Revision: 785968 URL: http://svn.apache.org/viewvc?rev=785968&view=rev Log: CAMEL-1729: converters are not correctly loaded in OSGi
Modified: camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/Activator.java camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiAnnotationTypeConverterLoader.java camel/branches/camel-1.x/components/camel-osgi/src/test/java/org/apache/camel/osgi/ActivatorTest.java Modified: camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/Activator.java URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/Activator.java?rev=785968&r1=785967&r2=785968&view=diff ============================================================================== --- camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/Activator.java (original) +++ camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/Activator.java Thu Jun 18 09:07:57 2009 @@ -28,6 +28,7 @@ import java.util.Properties; import java.util.Set; import java.util.StringTokenizer; +import java.util.Collection; import org.apache.camel.util.ObjectHelper; import org.apache.commons.logging.Log; @@ -59,7 +60,7 @@ Class type; } - private class TypeConverterEntry { + public class TypeConverterEntry { Bundle bundle; URL resource; Set<String> converterPackages; @@ -246,21 +247,12 @@ protected static Bundle getBundle() { return bundle; } - - protected static synchronized String[] findTypeConverterPackageNames() { - LOG.trace("Finding TypeConverterPackageNames"); - Set<String> packages = new HashSet<String>(); - for (TypeConverterEntry entry : TYPE_CONVERTERS.values()) { - for (String packageName : entry.converterPackages) { - if (LOG.isTraceEnabled()) { - LOG.trace("Found TypeConverterPackage: " + packageName); - } - packages.add(packageName); - } - } - return packages.toArray(new String[packages.size()]); + + protected static synchronized TypeConverterEntry[] getTypeConverterEntries() { + Collection<TypeConverterEntry> entries = TYPE_CONVERTERS.values(); + return entries.toArray(new TypeConverterEntry[entries.size()]); } - + public static synchronized Class getComponent(String name) throws Exception { LOG.trace("Finding Component: " + name); return getClassFromEntries(name, COMPONENTS); Modified: camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiAnnotationTypeConverterLoader.java URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiAnnotationTypeConverterLoader.java?rev=785968&r1=785967&r2=785968&view=diff ============================================================================== --- camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiAnnotationTypeConverterLoader.java (original) +++ camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiAnnotationTypeConverterLoader.java Thu Jun 18 09:07:57 2009 @@ -16,19 +16,37 @@ */ package org.apache.camel.osgi; +import java.util.Set; + import org.apache.camel.impl.converter.AnnotationTypeConverterLoader; +import org.apache.camel.impl.converter.TypeConverterRegistry; +import org.apache.camel.util.ObjectHelper; +import org.apache.camel.Converter; +import org.apache.commons.logging.LogFactory; +import org.apache.commons.logging.Log; import org.osgi.framework.BundleContext; public class OsgiAnnotationTypeConverterLoader extends AnnotationTypeConverterLoader { + private static final transient Log LOG = LogFactory.getLog(OsgiAnnotationTypeConverterLoader.class); + public OsgiAnnotationTypeConverterLoader(BundleContext context) { super(new OsgiResolverUtil(context)); } - protected String[] findPackageNames() { - return Activator.findTypeConverterPackageNames(); + @Override + public void load(TypeConverterRegistry registry) throws Exception { + for (Activator.TypeConverterEntry entry : Activator.getTypeConverterEntries()) { + OsgiResolverUtil resolver = new OsgiResolverUtil(entry.bundle.getBundleContext()); + String[] packages = entry.converterPackages.toArray(new String[entry.converterPackages.size()]); + resolver.findAnnotated(Converter.class, packages); + Set<Class> classes = resolver.getClasses(); + for (Class type : classes) { + if (LOG.isDebugEnabled()) { + LOG.debug("Loading converter class: " + ObjectHelper.name(type)); + } + loadConverterMethods(registry, type); + } + } } - - - } Modified: camel/branches/camel-1.x/components/camel-osgi/src/test/java/org/apache/camel/osgi/ActivatorTest.java URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-osgi/src/test/java/org/apache/camel/osgi/ActivatorTest.java?rev=785968&r1=785967&r2=785968&view=diff ============================================================================== --- camel/branches/camel-1.x/components/camel-osgi/src/test/java/org/apache/camel/osgi/ActivatorTest.java (original) +++ camel/branches/camel-1.x/components/camel-osgi/src/test/java/org/apache/camel/osgi/ActivatorTest.java Thu Jun 18 09:07:57 2009 @@ -16,6 +16,8 @@ */ package org.apache.camel.osgi; +import java.util.Set; + import junit.framework.TestCase; import org.springframework.osgi.mock.MockBundle; import org.springframework.osgi.mock.MockBundleContext; @@ -38,20 +40,23 @@ assertNotNull("The bean_test component should not be null", clazz); } - private boolean containsPackageName(String packageName, String[] packages) { - for (String name : packages) { - if (name.equals(packageName)) { - return true; + private boolean containsPackageName(String packageName, Activator.TypeConverterEntry[] entries) { + for (Activator.TypeConverterEntry entry : entries) { + for (String name : entry.converterPackages) { + if (name.equals(packageName)) { + return true; + } } } return false; } - public void testFindTypeConverterPackageNames() throws Exception { - String[] packages = Activator.findTypeConverterPackageNames(); - assertEquals("We should find three converter package here", 3, packages.length); - - assertTrue("Here should contains org.apache.camel.osgi.test", containsPackageName("org.apache.camel.osgi.test", packages)); + public void testGetTypeConverterEntries() throws Exception { + Activator.TypeConverterEntry[] entries = Activator.getTypeConverterEntries(); + + assertTrue("Here should contains org.apache.camel.converter", containsPackageName("org.apache.camel.converter", entries)); + assertTrue("Here should contains org.apache.camel.spring.converter", containsPackageName("org.apache.camel.spring.converter", entries)); + assertTrue("Here should contains org.apache.camel.osgi.test", containsPackageName("org.apache.camel.osgi.test", entries)); } }