Fix ClassNotFoundException when clients don't have aeri dependency
Bug: 521657
Change-Id: Iaeaa31bd655ef2e9104e61adbf3cea679a4308a7
Signed-off-by: Johannes Dorn <johannes.dorn@codetrails.com>
diff --git a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/handlers/CreateConfigureDialogHandler.java b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/handlers/CreateConfigureDialogHandler.java
index 4b386bf..4819a73 100644
--- a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/handlers/CreateConfigureDialogHandler.java
+++ b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/handlers/CreateConfigureDialogHandler.java
@@ -43,7 +43,12 @@
}
Class<? extends Dialog> clazz;
try {
- clazz = (Class<? extends Dialog>) ext.loadClass(clazzName);
+ try {
+ clazz = (Class<? extends Dialog>) ext.loadClass(clazzName);
+ } catch (ClassNotFoundException e) {
+ // If the contributing bundle's classloader can't find the class, try our own.
+ clazz = (Class<? extends Dialog>) getClass().getClassLoader().loadClass(clazzName);
+ }
Dialog object = ContextInjectionFactory.make(clazz, child);
return object;
} catch (Exception e) {
diff --git a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/handlers/CreateReportProcessorHandler.java b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/handlers/CreateReportProcessorHandler.java
index 66a75f8..83f6381 100644
--- a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/handlers/CreateReportProcessorHandler.java
+++ b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/handlers/CreateReportProcessorHandler.java
@@ -24,7 +24,13 @@
public ReportProcessorSafeWrapper execute(String providerClass, IEclipseContext context, String contributor) {
Bundle ext = Platform.getBundle(contributor);
try {
- Class<? extends IReportProcessor> clazz = (Class<? extends IReportProcessor>) ext.loadClass(providerClass);
+ Class<? extends IReportProcessor> clazz;
+ try {
+ clazz = (Class<? extends IReportProcessor>) ext.loadClass(providerClass);
+ } catch (ClassNotFoundException e) {
+ // If the contributing bundle's classloader can't find the class, try our own.
+ clazz = (Class<? extends IReportProcessor>) getClass().getClassLoader().loadClass(providerClass);
+ }
IReportProcessor reportProcessor = ContextInjectionFactory.make(clazz, context);
if (reportProcessor instanceof IEditableReportProcessor) {
return new EditableReportProcessorSafeWrapper((IEditableReportProcessor) reportProcessor);
diff --git a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/handlers/CreateServerConnectionHandler.java b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/handlers/CreateServerConnectionHandler.java
index 5cce75b..20a9a0c 100644
--- a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/handlers/CreateServerConnectionHandler.java
+++ b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/handlers/CreateServerConnectionHandler.java
@@ -25,7 +25,13 @@
Bundle ext = Platform.getBundle(contributor);
String clazzName = server.getClazz();
try {
- Class<? extends IServerConnection> clazz = (Class<? extends IServerConnection>) ext.loadClass(clazzName);
+ Class<? extends IServerConnection> clazz;
+ try {
+ clazz = (Class<? extends IServerConnection>) ext.loadClass(clazzName);
+ } catch (ClassNotFoundException e) {
+ // If the contributing bundle's classloader can't find the class, try our own.
+ clazz = (Class<? extends IServerConnection>) getClass().getClassLoader().loadClass(clazzName);
+ }
IServerConnection object = ContextInjectionFactory.make(clazz, context);
server.setConnection(object);
return object;