Allowing driver loaders to refer to classes loaded by others.
Change-Id: Ife4e50758620d4c052a7bb81740d9b9305647317
diff --git a/core/api/src/main/java/org/onosproject/net/driver/XmlDriverLoader.java b/core/api/src/main/java/org/onosproject/net/driver/XmlDriverLoader.java
index e63e710..30d1875 100644
--- a/core/api/src/main/java/org/onosproject/net/driver/XmlDriverLoader.java
+++ b/core/api/src/main/java/org/onosproject/net/driver/XmlDriverLoader.java
@@ -64,6 +64,7 @@
private static final String IMPL = "[@impl]";
private final ClassLoader classLoader;
+ private final BehaviourClassResolver resolver;
private Map<String, Driver> drivers = Maps.newHashMap();
@@ -72,9 +73,23 @@
* class loader.
*
* @param classLoader class loader to use
+ * @deprecated since 1.7.0 (Hummingbird)
*/
+ @Deprecated
public XmlDriverLoader(ClassLoader classLoader) {
+ this(classLoader, null);
+ }
+
+ /**
+ * Creates a new driver loader capable of loading drivers from the supplied
+ * class loader.
+ *
+ * @param classLoader class loader to use
+ * @param resolver behaviour class resolver
+ */
+ public XmlDriverLoader(ClassLoader classLoader, BehaviourClassResolver resolver) {
this.classLoader = classLoader;
+ this.resolver = resolver;
}
/**
@@ -182,7 +197,13 @@
try {
return (Class<? extends Behaviour>) classLoader.loadClass(className);
} catch (ClassNotFoundException e) {
- throw new IllegalArgumentException("Unable to load class " + className, e);
+ if (resolver != null) {
+ Class<? extends Behaviour> cls = resolver.getBehaviourClass(className);
+ if (cls != null) {
+ return cls;
+ }
+ }
+ throw new IllegalArgumentException("Unable to resolve class " + className, e);
}
}