【问题标题】:RemoteException java.rmi.UnmarshalException: error unmarshalling return [duplicate]RemoteException java.rmi.UnmarshalException:解组返回错误[重复]
【发布时间】:2011-11-13 09:38:16
【问题描述】:

我在 diff 物理机上的 2 个 JVM 上运行程序 here。我收到错误

RemoteException
java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
    java.lang.ClassNotFoundException: CalculatorImpl_Stub (no security manager: RMI class loader disabled)

我什至尝试在同一台机器上运行它(未更改的程序),它可以工作,但它不能在 diff 机器上工作。有人可以帮我吗?

@beny23- 谢谢,但我仍然遇到此错误:

RemoteException
java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
java.lang.ClassNotFoundException: CalculatorImpl_Stub

客户端如何拥有CalculatorImpl_stub的副本?

【问题讨论】:

    标签: java rmi classnotfoundexception


    【解决方案1】:

    我遇到了这个问题,因为我在客户端和服务器代码中有不同的包名称:

    package my.pkg; 
    // server side interface definition...
    
    // ------------- //
    
    package my.pkg.something;
    // client side interface definition...
    

    我把客户端包的名字改成了服务端包的名字:

    package my.pkg; 
    // server side interface definition...
    
    // ------------- //
    
    package my.pkg; // renamed to the name of package in server-side .
    // client side interface definition...
    

    问题就解决了。

    【讨论】:

    • 这个答案解决了我的问题。您知道发生这种情况的原因吗?
    • @RodrigoBorba 不!可惜我不记得了……
    • 帮助我在 ehCache 中进行 RMI 缓存复制
    【解决方案2】:

    我的 Java 类有一个可用的 RMI ClientServer。我决定将它们放入他们自己的包中,而不是作为默认包运行。

    在我将它们放入自己的包中后,java.rmi.UnmarshalException: error unmarshalling return; nested exception is: java.lang.ClassNotFoundException: 错误开始在连接时发生。

    我将程序放回默认包中,一切又开始工作了。

    我意识到这可能有技术原因,但这对我有用!

    【讨论】:

    • 难以置信,它对我有用。
    • 是的!它也对我有用。
    【解决方案3】:

    听起来您没有使用安全管理器:

    您是否有策略文件 (my.policy):

    grant {
      permission java.security.AllPermission;
    };
    

    并使用

    运行您的程序
    java -Djava.security.manager -Djava.security.policy=/some/path/my.policy MyClass
    

    【讨论】:

    • 他不需要SecurityManager 或 .policy 文件来解决这个问题,除非他正在尝试使用 RMI 代码库功能,这不是声明。
    • EJP 请添加更多信息!这听起来很有用,但我不明白。
    • @Victor 看我的回答。
    【解决方案4】:

    有三种情况。

    1. 如果您在绑定到 Registry 时遇到错误,则 Registry 无法通过其类路径或代码库功能访问该类。

    2. 如果您在查找注册表时遇到错误,则您的 客户端 无法通过其类路径或代码库功能访问该类。

    3. 1234563代码库注释丢失,因此您的客户不知道使用该类的代码库。
    4. 如果您没有使用代码库功能,请忽略上一段 ;-)

    【讨论】:

    • 刚刚登陆这个...您能解释一下您正在谈论的代码库功能吗?
    【解决方案5】:

    我通过重命名包名解决了这个问题。服务器和客户端位于两个不同的项目中,但具有相同的包命名。

    【讨论】:

    • 这对我有用
    猜你喜欢
    • 1970-01-01
    • 2011-12-11
    • 2012-12-13
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    相关资源
    最近更新 更多