RMI на клиентском генерирующемся исключении при получении ссылки на сервер RMI

Когда я пытаюсь выполнить клиент 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", и номер порта 1099 (я предполагаю, что это должно быть значение по умолчанию, которое является 1099, так как я не указывал его, когда я выполнил мой RmiEncodingServer).

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

спасибо

1
задан ewernli 7 June 2010 в 16:50
поделиться

2 ответа

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

0
ответ дан 3 September 2019 в 00:00
поделиться

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

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

Несколько советов:

  1. Убедитесь, что вы реализуете интерфейс, например

    EncoderImpl расширяет UnicastRemoteObject, реализует EncodeInterface

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

    static final long serialVersionUID = 10275539472837495L;

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

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

Связанный вопрос: Проблема прокси Java RMI

2
ответ дан 3 September 2019 в 00:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: