Я создаю новый классLoader с помощью URLClassLoader и пытаюсь установить его как classLoader для текущего потока. Но он не работает должным образом для меня. Как я понимаю, если бы я установил classLoader в текущий поток, методы и интерфейсы, на которые ссылается текущий поток, должны быть из текущего классаLoader. Но это не тот случай со мной. Метод взят из другой банки, и я получаю classCastExecption. Ниже приводится код для получения ClassLoader:Классы ClassLoader неправильно загружены в поток
public ClassLoader getClassLoader(boolean b) {
ClassLoader loader = null;
File file = new File(SamVariables.JAR_FILE);
if (file.exists()){
try {
List<URL> urlsList = new ArrayList<URL>();
urlsList.add(file.toURI().toURL());
URL[] urls = new URL[urlsList.size()];
urlsList.toArray(urls);
URLClassLoader url = new URLClassLoader(urls);
try {
loader = Class.forName("org.jboss.naming.remote.client.InitialContextFactory", false, url).getClassLoader();
} catch (ClassNotFoundException e) {
loader = Class.forName("org.jboss.jms.client.JBossConnectionFactory", false, url).getClassLoader();
}
}
} catch (Throwable e) {
e.printStackTrace();
}
}
return loader; // I am successfully getting the classLoader for the class
}
I set it to the current thread
Thread.currentThread().setContextClassLoader(getClassLoader);
But later when I try to get the topicConnectionFactory object, it gives me typecast exception:
topicConnectionFactory = (TopicConnectionFactory) topicConnectionFactObj;
Это дает мне ClassCastException.
Когда я проверил объект TopicConnectionFactory, он исходит из другого файла jar, который вызывает проблему.