【问题标题】:java.rmi.UnmarshalException: error unmarshallingjava.rmi.UnmarshalException:解组错误
【发布时间】:2012-06-13 09:29:09
【问题描述】:

当我尝试从 struts 的操作类(即 RMI 客户端)访问 RMI serevr 时(单击 jsp 按钮),我得到了这个 execption

java.rmi.UnmarshalException: error unmarshalling return; nested exception is:    
    java.lang.ClassNotFoundException: com.mindcraft.queryExecutor.actionclass.ExecutorInterface (no security manager: RMI class loader disabled)  

下面是我的RMI客户端sn-p

try{   
        ExecutorInterface p=(ExecutorInterface)Naming.lookup("//localhost:2007/exec1");   
        System.out.println("Inside client.."+ p.toString());   
        int a= p.getJobStatus("2");   
        System.out.println("a..." + a);   
        p.killJob("1");   
            p.executeJob(id, usrname, pswd);   
        System.out.println("Threads started, main ends\n");   
        }   
        catch(Exception e)   
        {   
            System.out.println("Execption in RMI..."+ e);   
            e.printStackTrace();   
        }  

当我用 public static void main() 在单独的文件中尝试上面的代码时很好,但是在 struts 框架的 Action 类中尝试相同的代码时得到上面的异常。

【问题讨论】:

  • 这与策略文件有关。
  • 哪个文件 java.policy 或 java.security 文件???
  • java 安全文件的策略文件 :D
  • @Th0rndike 这与策略文件无关。例外情况是没有安全管理器,因此没有有效的策略文件。

标签: jsp struts rmi


【解决方案1】:

在附近发现了这个:

设置安全策略文件如:

grant {  
permission java.security.AllPermission "", "";  
};

在您的启动命令中:

-Djava.security.policy=/Security/policy.all

来源:link

试试看,如果它有效,请告诉我。

【讨论】:

  • 您引用的链接关注AccessControlException,而不是ClassNotFoundException。该解决方案所做的是提供一个安全管理器并强制执行该策略文件。他可能根本不需要安全经理。
  • @EJP 介意进一步解释吗?我不是这方面的专家,只是幸运地找到了解决方案。但我有兴趣了解这个问题。
  • 如果他尝试使用代码库功能并且没有安全管理器,则指定策略文件会打开安全管理器,这会打开代码库功能。如果他没有尝试使用代码库功能,这不是解决方案:解决方案是将缺少的类部署到客户端。
【解决方案2】:

请务必注意以下事项以避免此错误:

  1. 您必须确保服务器中的接口名称与客户端中的接口实现相同。
  2. 确保包名,在客户端放接口的地方和你在服务端放接口的包名一致。

【讨论】:

    【解决方案3】:

    新的 Java 7 和 Java 6 版本中的验证发生了变化。 Bug id 为:6861062 java classes_security 在证书链验证中禁用 MD2

    在签署 Jara 文件时,我收到了一些警告消息,并且在执行命令时: jarsigner MyTools.jar -verify -verbose -certs

    我收到了消息: X.509, OU=Class 3 Public Primary Certification Authority, O="VeriSign, Inc.", C=US [证书有效期为29.01.96 01:00至02.08.28 01:59] [CertPath 未验证:算法约束检查失败:MD2withRSA]

    我的解决方案是: - 使用另一个版本的 JDK 来签名和 JRE 插件。 - 更新您的证书安全性,以免使用此算法。

    【讨论】:

      猜你喜欢
      • 2011-11-13
      • 2011-12-11
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      相关资源
      最近更新 更多