Когда я пытаюсь выполнить клиент 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, я получаю то же исключение, какие-либо идеи относительно того, почему это происходит?
спасибо
Проблема заключалась в том, что у меня разные имена пакетов на стороне сервера и клиента, но классы, распространяемые на клиенте, должны быть точно такими же, как на сервере...
A ClassCastException
обычно означает, что либо
EncoderImpl
не реализует EncodeInterface
, либо Несколько советов:
Убедитесь, что вы реализуете интерфейс, например
EncoderImpl расширяет UnicastRemoteObject, реализует EncodeInterface
Добавьте идентификатор версии в свой класс, как поддерживается сериализацией java , например
static final long serialVersionUID = 10275539472837495L;
Очистите, перестройте и повторно разверните, а затем перезапустите все, чтобы убедиться, что один и тот же jar развернут повсюду и что где-то уже не работает сервер
Надеюсь, это поможет, в противном случае укажите дополнительную информацию в вопросе.
Связанный вопрос: Проблема прокси Java RMI