Java RMI命名查找引发由ClassNotFoundException引起的UnmarshaleException
在下面的示例中,使用naming.lookup()时,远程方法上的RMI服务验证不起作用。它不会给出任何错误,但不会返回远程接口值。但在搜索该服务上运行的所有服务时能够找到Java RMI命名查找引发由ClassNotFoundException引起的UnmarshaleException,java,rmi,Java,Rmi,在下面的示例中,使用naming.lookup()时,远程方法上的RMI服务验证不起作用。它不会给出任何错误,但不会返回远程接口值。但在搜索该服务上运行的所有服务时能够找到 Registry reg; String serverAddress = "xxxxx"; String serverPort = "xxxx"; String text = "x"; try { reg= LocateRegistry.getRegistry(serverAddress, (new Integer(
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();
}
您声称没有发生的异常几乎肯定是由于
ClassNotFoundException
提到了远程接口或存根,或者它们所依赖的类。当您调用list()
时,您只是检索字符串,而不是对象的类,因此没有例外
list()
和lookup()
都会告诉您对象当前是否绑定在注册表中。这本身并不意味着该对象仍然存在。您必须对其执行远程方法才能知道这一点;为此,您需要缺少的类。那么它会返回什么呢?你能将其转换到远程接口吗?不,我不知道它返回什么,因为要求只检查服务是否已启动并正在运行,不需要捕获返回。所以,如果你不知道它返回什么,你怎么可能知道它不是远程接口的实例?你到底有什么问题?为什么要同时调用list()和lookup()?我不是同时调用这两个函数。它们只是用来测试的。我的问题是,如果它是使用list找到的,为什么不使用lookup()找到呢?不,它没有返回任何内容。它抛出了一个解组异常。
换句话说,它确实给出了一个错误!请将堆栈跟踪编辑到您的帖子中。为什么要花两天时间才能得到最基本的信息?谢谢。您可以看到,如果您正确地描述了您的问题并包含堆栈跟踪,而不是只说“无法”和“没有给出错误”之类的话,那么它会更快。