java.io.ObjectStreamClass无法强制转换为java.lang.String

时间:2010-08-19 10:55:01

标签: java casting rmi

java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassCastException: java.io.ObjectStreamClass cannot be cast to java.lang.String
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at com.nxl.smssession.SessionRMI.<init>(SessionRMI.java:33)
at com.nxl.smssession.Main.main(Main.java:33)
Caused by: java.lang.ClassCastException: java.io.ObjectStreamClass cannot be cast to java.lang.String

有人可以解释为什么会发生这种错误

当我正在进行 RMI绑定操作

时,会发生这种情况

此问题仅在 SOLARIS 系统上发生,它在Windows和Linux中正常运行

以下是生成此错误的代码

public SessionRMI(String servicename) throws AlreadyBoundException {  
    SessionImpl service = new SessionImpl();   
    try {  
        logger.debug("Publishing the SMS Session endpoint " + servicename);  
        SessionIface stub = (SessionIface) UnicastRemoteObject.exportObject(service, 0);  
        Registry registry = LocateRegistry.getRegistry(); 
        registry.rebind(servicename, stub);  
        logger.debug("SMS Session endpoint published successfully "+servicename);  
    } catch (RemoteException ex) {  
        logger.error(ex.toString()); ex.printStackTrace();  
    }  
} 

提前致谢

5 个答案:

答案 0 :(得分:1)

存根本身无法反序列化。我会仔细检查你的存根类的生成,并确保在Solaris盒子上没有任何旧的.class文件。

答案 1 :(得分:1)

我在RedHat上遇到了这个问题,我认为这可能与我开始错误的rmiregistry版本...

我能够通过编程方式启动注册表来解决此问题。在registry.rebind()

之前添加它
java.rmi.registry.LocateRegistry.createRegistry(1099);

答案 2 :(得分:0)

请在(SessionRMI.java:33)向我们提供有问题的代码,以便我们对其进行检查。

如果没有其他信息,我只能说:

施法的Intead尝试对象。<​​strong> toString ();

ObjectStreamClass osc = new ObjectStreamClass();

String str1 = (String)osc; // Throws ClasCastException

String str2 = osc.toString(); // always works if osc is not null

答案 3 :(得分:0)

看起来你有一个需要String参数的远程方法,而是你给它一个java.io.ObjectStreamClass。这当然会引发UnmarshalException

您应仔细检查RMI绑定操作尝试,并确保尝试调用正确的方法,并在需要时提供正确的参数。请参阅文档以确认String参数应该代表什么,并相应地提供它。

参考

答案 4 :(得分:0)

感谢帮助人员。

我自己解决了这个问题。

似乎rmiregistry没有像在windows和linux中那样在solaris系统上启动。

我必须从代​​码本身手动启动它。