You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2016/06/21 19:25:23 UTC

[2/4] brooklyn-server git commit: Fix instantiating classes loaded from the bootstrap loader

Fix instantiating classes loaded from the bootstrap loader

getClassLoader() returns null for those, so use an explicit class loader. It's not used anyway in the code path, but needs to go through a checkNotNull.


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/05283c8f
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/05283c8f
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/05283c8f

Branch: refs/heads/master
Commit: 05283c8f1502b55060b011ad56b1cc36c9d13e71
Parents: ee3ca1e
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Fri Jun 17 18:04:11 2016 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Mon Jun 20 15:50:22 2016 +0300

----------------------------------------------------------------------
 .../java/org/apache/brooklyn/util/javalang/Reflections.java  | 8 +++++++-
 .../org/apache/brooklyn/util/javalang/ReflectionsTest.java   | 5 +++++
 2 files changed, 12 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/05283c8f/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java b/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java
index c622ffc..0f31882 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java
@@ -242,7 +242,13 @@ public class Reflections {
 
     /** Invokes a suitable constructor, supporting varargs and primitives */
     public static <T> Optional<T> invokeConstructorWithArgs(Class<T> clazz, Object[] argsArray, boolean setAccessible) {
-        Reflections reflections = new Reflections(clazz.getClassLoader());
+        ClassLoader cl = clazz.getClassLoader();
+        // if bootstrap class loader
+        if (cl == null) {
+            // The classloader isn't actually used so anything non-null will work
+            cl = ClassLoader.getSystemClassLoader();
+        }
+        Reflections reflections = new Reflections(cl);
         return invokeConstructorWithArgs(reflections, clazz, argsArray, setAccessible);
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/05283c8f/utils/common/src/test/java/org/apache/brooklyn/util/javalang/ReflectionsTest.java
----------------------------------------------------------------------
diff --git a/utils/common/src/test/java/org/apache/brooklyn/util/javalang/ReflectionsTest.java b/utils/common/src/test/java/org/apache/brooklyn/util/javalang/ReflectionsTest.java
index 7f16351..2f0537c 100644
--- a/utils/common/src/test/java/org/apache/brooklyn/util/javalang/ReflectionsTest.java
+++ b/utils/common/src/test/java/org/apache/brooklyn/util/javalang/ReflectionsTest.java
@@ -56,6 +56,11 @@ public class ReflectionsTest {
         assertNoDuplicates(fields);
     }
     
+    @Test
+    public void testConstructLangObject() {
+        Reflections.invokeConstructorWithArgs(java.util.Date.class);
+    }
+    
     public static interface MyInterface {
         public static final int MY_FIELD = 0;
         public void mymethod();