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

svn commit: r785987 - in /camel/trunk/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: ningjiang
Date: Thu Jun 18 09:33:52 2009
New Revision: 785987

URL: http://svn.apache.org/viewvc?rev=785987&view=rev
Log:
CAMEL-1729 fixed the converter loading issue in OSGi

Modified:
    camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/Activator.java
    camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiAnnotationTypeConverterLoader.java
    camel/trunk/components/camel-osgi/src/test/java/org/apache/camel/osgi/ActivatorTest.java

Modified: camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/Activator.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/Activator.java?rev=785987&r1=785986&r2=785987&view=diff
==============================================================================
--- camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/Activator.java (original)
+++ camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/Activator.java Thu Jun 18 09:33:52 2009
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.URL;
+import java.util.Collection;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -59,7 +60,7 @@
         Class type;
     }
     
-    private class TypeConverterEntry {
+    public class TypeConverterEntry {
         Bundle bundle;
         URL resource;
         Set<String> converterPackages;
@@ -247,18 +248,9 @@
         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 {

Modified: camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiAnnotationTypeConverterLoader.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiAnnotationTypeConverterLoader.java?rev=785987&r1=785986&r2=785987&view=diff
==============================================================================
--- camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiAnnotationTypeConverterLoader.java (original)
+++ camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiAnnotationTypeConverterLoader.java Thu Jun 18 09:33:52 2009
@@ -16,17 +16,39 @@
  */
 package org.apache.camel.osgi;
 
+import java.util.Set;
+
+import org.apache.camel.Converter;
 import org.apache.camel.impl.converter.AnnotationTypeConverterLoader;
 import org.apache.camel.spi.PackageScanClassResolver;
+import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 public class OsgiAnnotationTypeConverterLoader extends AnnotationTypeConverterLoader {
+    
+    private static final transient Log LOG = LogFactory.getLog(OsgiAnnotationTypeConverterLoader.class);
 
     public OsgiAnnotationTypeConverterLoader(PackageScanClassResolver packageScanClassResolver) {
         super(packageScanClassResolver);
     }
 
-    protected String[] findPackageNames() {
-        return Activator.findTypeConverterPackageNames();
+    @Override
+    public void load(TypeConverterRegistry registry) throws Exception {
+        for (Activator.TypeConverterEntry entry : Activator.getTypeConverterEntries()) {
+            OsgiPackageScanClassResolver resolver = new OsgiPackageScanClassResolver(entry.bundle.getBundleContext());
+            String[] packages = entry.converterPackages.toArray(new String[entry.converterPackages.size()]);
+            Set<Class> classes = resolver.findAnnotated(Converter.class, packages);           
+            for (Class type : classes) {
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Loading converter class: " + ObjectHelper.name(type));
+                }
+                loadConverterMethods(registry, type);
+             }
+         }
     }
+    
+    
 
 }

Modified: camel/trunk/components/camel-osgi/src/test/java/org/apache/camel/osgi/ActivatorTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-osgi/src/test/java/org/apache/camel/osgi/ActivatorTest.java?rev=785987&r1=785986&r2=785987&view=diff
==============================================================================
--- camel/trunk/components/camel-osgi/src/test/java/org/apache/camel/osgi/ActivatorTest.java (original)
+++ camel/trunk/components/camel-osgi/src/test/java/org/apache/camel/osgi/ActivatorTest.java Thu Jun 18 09:33:52 2009
@@ -41,10 +41,12 @@
         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;
@@ -52,9 +54,11 @@
     
     @Test
     public void testFindTypeConverterPackageNames() throws Exception {
-        String[] packages = Activator.findTypeConverterPackageNames();
-        assertTrue("We should find some converter packages here", packages.length > 0);        
-        assertTrue("Here should contains org.apache.camel.osgi.test", containsPackageName("org.apache.camel.osgi.test", packages));
+        Activator.TypeConverterEntry[] entries = Activator.getTypeConverterEntries();
+        assertTrue("We should find some converter packages here", entries.length > 0);        
+        assertTrue("Here should contains org.apache.camel.osgi.test", containsPackageName("org.apache.camel.osgi.test", 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));        
     }
 
 }