将Groovy RootLoader与Java 8 SystemClassLoader集成

以下内容是我使用的库的深层内容。在2015年,它与Groovy 2.3和2.4的早期版本(可能与Java 6或7)一起使用!在尝试修改Java9 +之前,我想更新到Java 8。

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,bytes);
        byte[] wrappedData = this.internalFilter.filterTX(message);
        return wrappedData;
    }

与Groovy社区讨论之后,我发现问题出在Intellij调用Groovy脚本的方式上。该代码可以在eclipse中正常运行。在Intellij中,有必要为我要并行运行的每个脚本创建一个jar工件,然后可以从命令行界面运行它们。我用Java 8对应用程序进行了重新编码,并且没有问题。希望有帮助。

salanganeyuhaiyan 回答:将Groovy RootLoader与Java 8 SystemClassLoader集成

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3166161.html

大家都在问