2

RMI を介してクライアントとリモート サーバーを接続しようとすると、次のエラー メッセージが表示されます。

java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
    java.net.MalformedURLException: unknown protocol: c
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at java.rmi.Naming.lookup(Unknown Source)
    at RmiClient.getMessage(RmiClient.java:11)
    at RmiClient.main(RmiClient.java:26)
Caused by: java.net.MalformedURLException: unknown protocol: c
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at sun.rmi.server.LoaderHandler.pathToURLs(Unknown Source)
    at sun.rmi.server.LoaderHandler.getDefaultCodebaseURLs(Unknown Source)
    at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
    at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source)
    at java.rmi.server.RMIClassLoader.loadClass(Unknown Source)
    at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)
    at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
    at java.io.ObjectInputStream.readClassDesc(Unknown Source)
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    ... 4 more

以下が問題の原因である可能性があります。

サーバーには次の行があります。

Naming.rebind("rmi://172.31.24.66:1099/RmiServer", obj);

これは、EC2 インスタンスのプライベート IP アドレスを指します。一方、クライアントには次の行があります。これは、上記の 11 行目です。

RmiServerIntf  obj = (RmiServerIntf)Naming.lookup("rmi://54.229.66.114:1099/RmiServer");

これは、そのインスタンスのパブリック IP です。また、クライアント側では、コードベース プロパティを次のように設定します。

System.setProperty("java.rmi.server.codebase", "C:\\Users\\spacitron\\Projects\\RMIClient\\bin");

サーバーに同じ行を追加しようとすると、「許可が拒否されました」というエラーが表示されます。

4

2 に答える 2

0

jdk7 を update 21 未満/jdk6 を update 45 未満にグレードダウンしてみてください。この作業の問題を​​再度コンパイルしてテストします。これは java.rmi.server.useCodebaseOnly システム プロパティです。jdk の両方のバージョンの解決策については、以下のリンクを確認してください。

http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/relnotes.html

于 2013-07-22T13:05:32.900 に答える