X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fbinding%2Fimpl%2Futil%2FClassLoaderUtils.java;h=e0eb10299256a9d6ff48e0bb305f15c57fee1848;hb=5cebad0c07f3d15d42be522cf484fa6eea3d7c88;hp=596329e07b1cdb23b2642d3f97e943aebcbf579a;hpb=d71f93358dc8f914ffc759e655e78242bb7a88f9;p=controller.git diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/ClassLoaderUtils.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/ClassLoaderUtils.java index 596329e07b..e0eb102992 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/ClassLoaderUtils.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/ClassLoaderUtils.java @@ -7,9 +7,10 @@ import static com.google.common.base.Preconditions.*; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import com.google.common.base.Joiner; import com.google.common.base.Optional; public final class ClassLoaderUtils { @@ -55,17 +56,31 @@ public final class ClassLoaderUtils { public static Class loadClassWithTCCL(String name) throws ClassNotFoundException { if ("byte[]".equals(name)) { return byte[].class; + } else if("char[]".equals(name)) { + return char[].class; + } + try { + return Thread.currentThread().getContextClassLoader().loadClass(name); + } catch (ClassNotFoundException e) { + String[] components = name.split("\\."); + String potentialOuter; + int length = components.length; + if (length > 2 && (potentialOuter = components[length - 2]) != null && Character.isUpperCase(potentialOuter.charAt(0))) { + + String outerName = Joiner.on(".").join(Arrays.asList(components).subList(0, length - 1)); + String innerName = outerName + "$" + components[length-1]; + return Thread.currentThread().getContextClassLoader().loadClass(innerName); + } else { + throw e; + } } - - return Thread.currentThread().getContextClassLoader().loadClass(name); } public static Class tryToLoadClassWithTCCL(String fullyQualifiedName) { try { return loadClassWithTCCL(fullyQualifiedName); } catch (ClassNotFoundException e) { - + return null; } - return null; } } \ No newline at end of file