Я плохо знаком с технологией RMI.
Когда я запускаю rmi клиентскую программу, я получаю исключение: java.rmi. UnmarshalException: нераспознанный хеш метода: метод, не поддерживаемый удаленным объектом. Я использую jdk1.5
Аргументом удаленного метода является Сериализованный объект.
Это серверный код...
Это - Удаленный Интерфейс
package interfacepackage;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ServerInterface extends Remote{
public void getOrder(Order order) throws RemoteException;
}
Это - класс реализации сервера
public class ServerImplementation implements ServerInterface {
public ServerImplementation() throws RemoteException {
}
public void getOrderFromCash(Order order) throws RemoteException {
System.out.println("WORKED");
}
public static void main(String[] args)
try {
java.rmi.registry.LocateRegistry.createRegistry(1234);
ServerImplementation service = new ServerImplementation();
ServerInterface myRemoteObject = (ServerInterface) UnicastRemoteObject
.exportObject(service, 0);
java.rmi.registry.Registry registry = java.rmi.registry.LocateRegistry
.getRegistry("localhost", 1234);
registry.rebind("ServerImplementation", myRemoteObject);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Это - класс Порядок
public class Order implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String name;
public Order(int id,String name){
this.id=id;
this.name=name;
}
}
У меня есть тот же класс Интерфейса и Порядка в Клиенте также.
Это - клиентский код
public class TestClientProgram {
public static void main(String[] args) {
try{
java.rmi.registry.Registry registry = java.rmi.registry.LocateRegistry.getRegistry("localhost",1234);
ServerInterface service=(ServerInterface) registry.lookup("ServerImplementation");
Order orderObject=new Order(1,"dish");
service.getOrderFromCash(orderObject);
}
catch(Exception e){
e.printStackTrace();
}
}
}
Кто-либо мог помочь мне к тому, как я могу решить проблему?
Заранее спасибо Renjith M.
Исключение указывает, что сервер не может найти метод, который вызывается клиентом (сообщение об ошибке немного вводит в заблуждение). Одна из возможных причин может заключаться в том, что сервер и клиент работают с разными путями к классам и что код был достаточно изменен, чтобы интерфейсы RMI были несовместимы.
Здесь что-то не так. Ваш ServerInterface
имеет метод getOrder
, но в реализации есть getOrderFromCash
. Я бы проверил, что весь код скомпилирован и выполнен с теми же версиями этого интерфейса.