У меня действительно сложная проблема. У меня есть контейнер, который может запускать пользовательский JAR с помощью метода, который имеет класс ComponentContext
в качестве параметра. После загрузки я хочу вызвать этот метод с отражением, но есть проблема - я должен использовать тот же загрузчик классов (JCL в этом случае), чтобы создать ComponentContext
. Смотрите код:Передача объекта в класс, загруженный JCL
JclObjectFactory factory = JclObjectFactory.getInstance();
Object context = factory.create(jcl, "org.hive.lib.component.ComponentContextImpl");
Method setConfigDirMethod = context.getClass().getMethod("initialize", File.class, File.class);
setConfigDirMethod.invoke(context, configDir, workspace);
Method method = instance.getClass().getMethod("initialize", context.getClass());
method.invoke(instance, context);
И когда я пытаюсь передать контекст, созданный в контейнере, как этот
ComponentContextImpl c = new ComponentContext();
Это терпит неудачу с java.lang.IllegalArgumentException
из-за другой загрузчик классов.
Это означает, что мой контейнер зависит от класса от JAR, это сводит меня с ума. Это там способ передать мой собственный ComponentContext
(не экземпляр из JAR) к методу initialize
?
PS - JAR был собран с assembly:single