2012-06-13 23 views
0

,當我嘗試訪問(即RMI客戶端)(JSP上點擊按鈕)java.rmi.UnmarshalException:錯誤解組

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 serevr我得到這個execption是我的RMI客戶端片斷

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(); 
     } 

這是很好,當我試着在上面單獨的文件代碼公共靜態無效的main(),但是當試圖在Action類Struts框架的相同的代碼變得異常以上。

+0

這與策略文件有關。 – Th0rndike

+0

哪個文件是java.policy或java.security文件? – happy

+0

java安全文件的策略文件:D – Th0rndike

回答

2

找到這個局面:

設置安全策略文件,如:

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

在你開始的命令:

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

來源:link

嘗試一下並讓我知道它是否有效。

+0

非常感謝Th0rndike,它的工作現在.. :) – happy

+0

非常好然後:) – Th0rndike

+0

你引用的鏈接關注'AccessControlException',而不是'ClassNotFoundException'。此解決方案所做的是*提供*安全管理器並強制執行該策略文件。他可能根本不需要安全經理。 – EJP

0

,一定要採取的下面小心,以避免這個錯誤:

  1. 你必須確保在服務器的接口名稱相同的接口與在客戶端實現。
  2. 確保軟件包名稱,將接口放入客戶端的位置與將接口放入服務器的軟件包名稱相同。
0

新的Java 7和Java 6版本的驗證發生了變化。 錯誤ID是:6861062 java classes_security在證書鏈驗證中禁用MD2

在簽訂哈拉文件,我有一些警告消息,並執行該命令時: 的jarsigner MyTools.jar -verify -verbose -certs

我有消息: X.509,OU = 3類公共主認證機構,O =「VeriSign,Inc.」,C = US [證書有效期從29.01.96 01:00到02.08.28 01:59] [CertPath未驗證:算法約束檢查失敗:MD2withRSA]

我的解決方案是: - 使用另一版本的JDK進行簽名和JRE插件。 - 更新您的證書安全性以便不使用此算法。