[CAMEL-8556] AnnotationTypeConverterLoader treats package as class
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b60903a7 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b60903a7 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b60903a7 Branch: refs/heads/master Commit: b60903a7bd4fdf390ac93dce02abaf689a6275b2 Parents: 7eb6eb7 Author: Thomas Diesler <[email protected]> Authored: Thu Mar 26 14:41:47 2015 +0100 Committer: Claus Ibsen <[email protected]> Committed: Thu Mar 26 15:28:59 2015 +0100 ---------------------------------------------------------------------- .../AnnotationTypeConverterLoader.java | 4 ++-- .../org/apache/camel/impl/osgi/Activator.java | 4 ++-- .../org/apache/camel/util/StringHelper.java | 25 ++++++++++++++++---- .../org/apache/camel/util/StringHelperTest.java | 19 ++++++++++++++- 4 files changed, 43 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/b60903a7/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java b/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java index f493b7e..c724870 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java +++ b/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java @@ -62,7 +62,7 @@ import org.slf4j.LoggerFactory; * Likewise the procedure for scanning using {@link PackageScanClassResolver} may require custom implementations * to work in various containers such as JBoss, OSGi, etc. * - * @version + * @version */ public class AnnotationTypeConverterLoader implements TypeConverterLoader { public static final String META_INF_SERVICES = "META-INF/services/org/apache/camel/TypeConverter"; @@ -163,7 +163,7 @@ public class AnnotationTypeConverterLoader implements TypeConverterLoader { // try to load it as a class first for (String name : packageNames) { // must be a FQN class name by having an upper case letter - if (StringHelper.hasUpperCase(name)) { + if (StringHelper.isClassName(name)) { Class<?> clazz = null; for (ClassLoader loader : resolver.getClassLoaders()) { try { http://git-wip-us.apache.org/repos/asf/camel/blob/b60903a7/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java b/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java index eebdc92..d73f6c6 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java +++ b/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java @@ -324,7 +324,7 @@ public class Activator implements BundleActivator, BundleTrackerCustomizer { for (String pkg : packages) { - if (StringHelper.hasUpperCase(pkg)) { + if (StringHelper.isClassName(pkg)) { // its a FQN class name so load it directly LOG.trace("Loading {} class", pkg); try { @@ -411,7 +411,7 @@ public class Activator implements BundleActivator, BundleTrackerCustomizer { } return answer; } finally { - Thread.currentThread().setContextClassLoader(oldClassLoader); + Thread.currentThread().setContextClassLoader(oldClassLoader); } } http://git-wip-us.apache.org/repos/asf/camel/blob/b60903a7/camel-core/src/main/java/org/apache/camel/util/StringHelper.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/util/StringHelper.java b/camel-core/src/main/java/org/apache/camel/util/StringHelper.java index 60919db..c8f1000 100644 --- a/camel-core/src/main/java/org/apache/camel/util/StringHelper.java +++ b/camel-core/src/main/java/org/apache/camel/util/StringHelper.java @@ -19,7 +19,7 @@ package org.apache.camel.util; import static org.apache.camel.util.StringQuoteHelper.doubleQuote; /** - * Helper methods for working with Strings. + * Helper methods for working with Strings. */ public final class StringHelper { @@ -28,10 +28,10 @@ public final class StringHelper { */ private StringHelper() { } - + /** * Ensures that <code>s</code> is friendly for a URL or file system. - * + * * @param s String to be sanitized. * @return sanitized version of <code>s</code>. * @throws NullPointerException if <code>s</code> is <code>null</code>. @@ -94,7 +94,7 @@ public final class StringHelper { // no quotes, so return as-is return s; } - + public static boolean isQuoted(String s) { if (ObjectHelper.isEmpty(s)) { return false; @@ -149,6 +149,23 @@ public final class StringHelper { } /** + * Determines if the string is a fully qualified class name + */ + public static boolean isClassName(String text) { + boolean result = false; + if (text != null) { + String[] split = text.split("\\."); + if (split.length > 0) { + String lastToken = split[split.length - 1]; + if (lastToken.length() > 0) { + result = Character.isUpperCase(lastToken.charAt(0)); + } + } + } + return result; + } + + /** * Does the expression have the language start token? * * @param expression the expression http://git-wip-us.apache.org/repos/asf/camel/blob/b60903a7/camel-core/src/test/java/org/apache/camel/util/StringHelperTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/util/StringHelperTest.java b/camel-core/src/test/java/org/apache/camel/util/StringHelperTest.java index e9c5ed2..23cb1ac 100644 --- a/camel-core/src/test/java/org/apache/camel/util/StringHelperTest.java +++ b/camel-core/src/test/java/org/apache/camel/util/StringHelperTest.java @@ -77,6 +77,23 @@ public class StringHelperTest extends TestCase { assertEquals(true, StringHelper.hasUpperCase("com.foo.MyClass")); assertEquals(true, StringHelper.hasUpperCase("com.foo.My")); + + // Note, this is not a FQN + assertEquals(true, StringHelper.hasUpperCase("com.foo.subA")); + } + + public void testIsClassName() throws Exception { + assertEquals(false, StringHelper.isClassName(null)); + assertEquals(false, StringHelper.isClassName("")); + assertEquals(false, StringHelper.isClassName(" ")); + assertEquals(false, StringHelper.isClassName("com.foo")); + assertEquals(false, StringHelper.isClassName("com.foo.123")); + + assertEquals(true, StringHelper.isClassName("com.foo.MyClass")); + assertEquals(true, StringHelper.isClassName("com.foo.My")); + + // Note, this is not a FQN + assertEquals(false, StringHelper.isClassName("com.foo.subA")); } public void testHasStartToken() throws Exception { @@ -96,7 +113,7 @@ public class StringHelperTest extends TestCase { // $foo{ is valid because its foo language assertEquals(true, StringHelper.hasStartToken("$foo{body}", "foo")); } - + public void testIsQuoted() throws Exception { assertEquals(false, StringHelper.isQuoted(null)); assertEquals(false, StringHelper.isQuoted(""));
