web-dev-qa-db-ja.com

RemoteException Java.rmi.UnmarshalException:エラーアンマーシャリングリターン

私はプログラムを実行しています ここ 異なる物理マシン上の2つのJVMで。エラーが発生します

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

同じマシン(変更されていないプログラム)で実行してみましたが、diffマシンでは動作しません。誰かplsは私を助けることができますか?

@ beny23-ありがとう、しかし私はまだこのエラーで終わります:

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

クライアント側はどのようにしてCalculatorImpl_stubのコピーを持つことができますか?

13
P R

セキュリティマネージャを使用していないようです。

ポリシーファイルを入手しましたか(my.policy):

grant {
  permission Java.security.AllPermission;
};

を使用してプログラムを実行します

Java -Djava.security.manager -Djava.security.policy=/some/path/my.policy MyClass
7
beny23

クライアントコードとサーバーコードでパッケージ名が異なるため、この問題が発生しました。

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...

そして問題はなくなりました。

13
Amin Saqi

私は働いていましたRMI ClientおよびServer for my Java class。これらをデフォルトのパッケージとして実行するのではなく、独自のパッケージに配置することにしました。

それらを独自のパッケージに配置した後、Java.rmi.UnmarshalException: error unmarshalling return; nested exception is: Java.lang.ClassNotFoundException:接続時にエラーが発生し始めました。

プログラムをデフォルトのパッケージに戻すと、すべてが再び機能し始めました。

これにはおそらく技術的な理由があると思いますが、これは私にとってはうまくいきました!

9
Rahim Khoja

3つのケースがあります。

  1. レジストリへのバインド時にエラーが発生した場合、レジストリはクラスパス上またはコードベース機能を介してそのクラスにアクセスできません。

  2. レジストリの検索時にエラーが発生した場合、clientは、クラスパス上またはコードベース機能を介してそのクラスにアクセスできません。

  3. コードベース機能を使用している場合、それはレジストリによって引き起こされる可能性がありますhavingクラスパス上のそのクラスへのアクセスにより、コードベースが使用されなくなり、コードベースアノテーションが失われます。そのため、クライアントはそのクラスのコードベースを使用することを知りません。

  4. コードベース機能を使用していない場合は、前の段落を無視してください;-)

3
user207421

パッケージ名の名前を変更して解決しました。サーバーとクライアントは2つの異なるプロジェクトにありますが、パッケージの名前は同じです。

0
DanialAbdi