问题
I'm running the program here on 2 JVMs on diff physical machines. I get the error
RemoteException
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: CalculatorImpl_Stub (no security manager: RMI class loader disabled)
I've even tried running it on the same machine(unchanged program) and it works but it doesnt work on diff machines. Can someone pls help me out?
@beny23- Thanks but I still end up with this error:
RemoteException
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: CalculatorImpl_Stub
How can the client side have a copy of CalculatorImpl_stub?
回答1:
It sounds like your not using a security manager:
Have you got a policy file (my.policy
):
grant {
permission java.security.AllPermission;
};
and run your program using
java -Djava.security.manager -Djava.security.policy=/some/path/my.policy MyClass
回答2:
I had this problem because I had different package names in client and server code:
package my.pkg;
// server side interface definition...
// ------------- //
package my.pkg.something;
// client side interface definition...
I changed the name of client-side package and set it as the name of server-side package:
package my.pkg;
// server side interface definition...
// ------------- //
package my.pkg; // renamed to the name of package in server-side .
// client side interface definition...
and the problem went away.
回答3:
I had a working RMI Client
and Server
for my Java class. I decided to place these into their own packages rather than running as a default package.
After I placed them in their own Packages the java.rmi.UnmarshalException: error unmarshalling return; nested exception is: java.lang.ClassNotFoundException:
error started happening on connection,.
I put the programs back into the default package and it all started working again.
I realize that there is probably a technical reason for this, but this worked for me!
回答4:
There are three cases.
If you get the error when binding to the Registry, the Registry doesn't have access to that class on its classpath or via the codebase feature.
If you get the error when looking up the Registry, your client doesn't have access to that class on its classpath or via the codebase feature.
If you are using the codebase feature, that in turn can be caused by the Registry having access to that class on its classpath, which causes it not to use the codebase, which causes loss of the codebase annotation, so your client doesn't know to use the codebase for that class.
If you aren't using the codebase feature, ignore the previous paragraph ;-)
回答5:
i solved it with rename package name. the server and client is in two different project , but rather with same package naming.
来源:https://stackoverflow.com/questions/7355429/remoteexception-java-rmi-unmarshalexception-error-unmarshalling-return