Это глубоко внутри библиотеки, которую я использую. В 2015 году это работало с Groovy 2.3 и более ранними версиями 2.4, возможно, с Java 6 или 7! Я хотел обновить до Java 8, прежде чем пытаться изменить для Java9 +.
final class DynamicClassLoader extends ClassLoader {
final NodeID originatingNode;
NetChannelOutput requestClassData;
NetChannelInput classDataResponse = NetChannel.net2one();
final Hashtable classes = new Hashtable();
DynamicClassLoader(NodeID originator, NetChannelLocation requestLocation) {
super(ClassLoader.getSystemClassLoader());
this.originatingNode = originator;
this.requestClassData = NetChannel.one2net(requestLocation);
}
...
}
Когда я пытаюсь вызвать код из Groovy, я получаю следующую ошибку: org.codehaus.groovy.tools.RootLoader cannot be cast to jcsp.net2.mobile.DynamicClassLoader
Точка, гдеэто вызывается из приведенного в следующем коде в строке, обозначенной **
public byte[] filterTX(Object obj)
throws IOException
{
ClassLoader loader = obj.getClass().getClassLoader();
byte[] bytes = this.internalFilter.filterTX(obj);
if (loader == ClassLoader.getSystemClassLoader() || loader == null)
{
DynamicClassLoaderMessage message = new DynamicClassLoaderMessage(Node.getInstance().getNodeID(),
(NetChannelLocation) ClassManager.in.getLocation(), bytes);
byte[] wrappedData = this.internalFilter.filterTX(message);
return wrappedData;
}
**DynamicClassLoader dcl = (DynamicClassLoader)loader;**
DynamicClassLoaderMessage message = new DynamicClassLoaderMessage(dcl.originatingNode,
(NetChannelLocation) ClassManager.in.getLocation(), bytes);
byte[] wrappedData = this.internalFilter.filterTX(message);
return wrappedData;
}
После обсуждения с сообществом Groovy я обнаружил, что проблема заключается в том, как Intellij вызывает скрипты Groovy. Код работает в Eclipse без каких-либо проблем. В Intellij было необходимо создать артефакт jar для каждого из сценариев, которые я хотел запустить параллельно, которые затем можно было запустить из интерфейса командной строки. Я перекодировал приложение в Java 8, и оно работало без проблем. Надеюсь, это поможет.