web-dev-qa-db-ja.com

java.rmi.UnmarshalException:引数のマーシャリング解除エラー。ネストされた例外は次のとおりです。Java.lang.ClassNotFoundException:ServicesTableau

Java RMI、テーブルの並べ替えに使用するサンプルプログラムを開発しましたが、次の例外が発生しました。

Erreur RemoteException occurred in server thread; nested exception is: 
    Java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
    Java.lang.ClassNotFoundException: ServicesTableau

これは私のサーバーのソースコードです:

public class Serveur {
    public static void main(String args[]) {

        try {

            System.out.println("Server start ...");
            ServicesTableauImpl od = new ServicesTableauImpl();
            String url = "rmi://" + args[0] + "/ServicesTableauImpl";
            System.out.println("Passe");
            Naming.rebind(url, od);
            System.out.println("Attente d'invocations de client / CTRL-C pour stopper");
        } catch (Exception e) {
            System.out.println("Erreur " + e.getMessage());
        }
    /*
    catch(Java.net.MalformatedURLException e){
    System.out.println("Mauvais nom de serveur");
    System.exit(1);
    }
    catch(RemoteException e){
    System.out.println("Pas de Rmiregistry");
    System.exit(1);
    }
    */
    }
}
8
MDIT

そのクラスは、RMIレジストリのCLASSPATHでは使用できません。これを修正する最も簡単な方法は、LocateRegistry.createRegistry().を介して同じJVMでレジストリを起動することです。結果を静的フィールドに保存します。

11
user207421

これは、サーバーと同じディレクトリでrmiregistryを実行しなかったために発生しました。

0
Greg Stretton

場合によっては、rmiクライアントのコード(インターフェイスとメイン)をデフォルトのパッケージに移動する必要があります。サーバー側で繰り返します。それはあなたの問題を解決することができます(rmiでのパッケージングの作業はそれほど明白ではありません)。

0
Roberto