allow from system if possible where bundle not known
for use if switching to a pojo environment
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java b/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java
index fc7e9bf..ce127c9 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java
@@ -380,7 +380,11 @@
.reduce((v1, v2) -> v2));
}
if (bundle.isAbsent()) {
- throw new IllegalStateException("Bundle " + toBundleString(symbolicName, version)+ " not found to load.");
+ // fall back to loading from system classpath, if running as pojo
+ Maybe<T> result = dispatcher.tryLoadFrom(classLoader, name);
+ if (result.isAbsent()) {
+ throw new IllegalStateException("Bundle " + toBundleString(symbolicName, version) + " not found to load.");
+ }
}
}
return dispatcher.tryLoadFrom(bundle.get(), name);
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/ClassLoaderUtilsTest.java b/core/src/test/java/org/apache/brooklyn/util/core/ClassLoaderUtilsTest.java
index efa0aea..7b6df6d 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/ClassLoaderUtilsTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/ClassLoaderUtilsTest.java
@@ -308,23 +308,23 @@
new ClassLoaderUtils(this, mgmt).loadClass(
"org.apache.brooklyn.api",
"100.100.100-alpha-version_wth.tags",
- Entity.class.getName());
+ "org.apache.brooklyn.NonExistentClass"); // actual classes may be found on the classpath
Asserts.shouldHaveFailedPreviously();
} catch (Exception e) {
IllegalStateException nested = Exceptions.getFirstThrowableOfType(e, IllegalStateException.class);
assertNotNull(nested);
- Asserts.expectedFailureContains(nested, "not found to load");
+ Asserts.expectedFailureContains(nested, "not found to load", "org.apache.brooklyn.api", "100.100.100");
}
try {
new ClassLoaderUtils(this, mgmt).loadClass(
"org.apache.brooklyn.api",
"100.100.100-SNAPSHOT",
- Entity.class.getName());
+ "org.apache.brooklyn.NonExistentClass"); // actual classes may be found on the classpath
Asserts.shouldHaveFailedPreviously();
} catch (Exception e) {
IllegalStateException nested = Exceptions.getFirstThrowableOfType(e, IllegalStateException.class);
assertNotNull(nested);
- Asserts.expectedFailureContains(nested, "not found to load");
+ Asserts.expectedFailureContains(nested, "not found to load", "org.apache.brooklyn.api", "100.100.100");
}
}