RMI на стороне клиента генерирует исключение при получении ссылки на сервер RMI - PullRequest
1 голос
/ 07 июня 2010

Когда я пытаюсь запустить клиент RMI после запуска сервера RMI, я получаю следующее исключение:

EncodeInterface exception: java.lang.ClassCastException: $Proxy30 cannot be cast to hw2.chat.backend.main.EncodeInterface
java.lang.ClassCastException: $Proxy30 cannot be cast to hw2.chat.backend.main.EncodeInterface
at hw2.chat.backend.main.EncodingRmiClient.initialiseRMIClient(EncodingRmiClient.java:26)

И соответствующий код в клиенте RMI:

EncodeInterface encodeInterface;
Registry registry = LocateRegistry.getRegistry(host, portNumber);
encodeInterface = (EncodeInterface)registry.lookup("RmiEncodingServer"); //line 26

А на сервере RMI:

    try
    {
        EncodeInterface encodeInterface = new EncoderImpl();
        Registry registry = LocateRegistry.getRegistry();
        registry.rebind("RmiEncodingServer", encodeInterface);
        System.out.println("RmiEncodingServer is running...");
    }

EncodeInterface - это интерфейс, который расширяет Remote и присутствует на стороне клиента.

Хост - это "127.0.0.1" иportNumber - 1099 (я предполагаю, что это должно быть значение по умолчанию, равное 1099, поскольку я не указал его при запуске RmiEncodingServer).

Если я не запускаю сервер RMI, я получаюЭто же исключение, есть идеи, почему это происходит?

спасибо

Ответы [ 2 ]

2 голосов
/ 07 июня 2010

A ClassCastException обычно означает, что либо

  • EncoderImpl не реализует EncodeInterface, либо
  • .jar на стороне клиента и на стороне сервераразные, в результате чего будут развернуты две версии класса, которые считаются разными.

Несколько подсказок:

  1. Проверьте, что реализован интерфейс, например

    EncoderImpl extends UnicastRemoteObject implements EncodeInterface

  2. Добавление идентификатора версии в ваш класс в соответствии с java сериализацией , например,

    static final long serialVersionUID = 10275539472837495L;

  3. Очистите, восстановите и заново разверните и перезапустите все, чтобы убедиться, что один и тот же файл jar развернут каждый раз и что где-то уже не работает сервер

Надеюсь, это поможет, в противном случае предоставьте больше информации в вопросе.

Схожий вопрос: Проблема прокси Java RMI

0 голосов
/ 07 июня 2010

Проблема заключалась в том, что у меня было другое имя пакета на стороне сервера и клиента, но классы, распространяемые на клиента, должны быть точно такими же, как на сервере ..

...