You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2009/06/18 11:07:58 UTC

svn commit: r785968 - in /camel/branches/camel-1.x/components/camel-osgi/src: main/java/org/apache/camel/osgi/Activator.java main/java/org/apache/camel/osgi/OsgiAnnotationTypeConverterLoader.java test/java/org/apache/camel/osgi/ActivatorTest.java

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