RMI命名查找抛出由ClassNotFoundException引起的UnmarshalException

时间:2014-02-07 21:44:01

标签: java rmi

在下面使用naming.lookup()时,远程方法上的RMI服务验证不起作用。它不会给出任何错误,但不会返回远程接口值。但是,当搜索在该服务上运行的所有服务时能够找到

Registry reg;
String serverAddress = "xxxxx";
String serverPort = "xxxx";
String text = "x";
try {
    reg= LocateRegistry.getRegistry(serverAddress, (new Integer(serverPort)).intValue());
    final String regsitryList[] = registry.list();
    // Remote r = registry.lookup("xservice") ;
    if (Arrays.asList(regsitryList).contains("xservice")) {
        Remote r = registry.lookup("xservice");
        if(r!=null)
        log.debug("found the service");
    }
} catch (RemoteException re) {
    re.printStackTrace();
}

1 个答案:

答案 0 :(得分:0)

你声称没有发生的例外几乎肯定是由于ClassNotFoundException提到了远程接口或存根,或者它们所依赖的类。当你调用list()时,你只是转发字符串,而不是对象的类,所以没有例外。

list()lookup()都会告诉您对象当前是否在注册表中绑定。这本身并不意味着对象仍然存在。您必须在其上执行远程方法才能知道;为此,你需要缺少的课程。