Исключения remoteexception Ява.РМО.UnmarshalException: ошибка unmarshalling возврат [дубликат]
этот вопрос уже есть ответ здесь:
- java.РМО.ServerException: RemoteException произошло в потоке сервера (ClassNotFoundException) 3 ответы
Я запускаю программу здесь на 2 JVMs на разных физических машинах. Я получаю ошибку
RemoteException
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: CalculatorImpl_Stub (no security manager: RMI class loader disabled)
Я даже пытался запустить его на той же машине(неизменная программа), и она работает, но она не работает на машинах diff. Может кто-то pls помочь мне?
@beny23-Спасибо, но я все равно заканчиваю с этой ошибкой:
RemoteException
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: CalculatorImpl_Stub
как клиентская сторона может иметь копию CalculatorImpl_stub?
5 ответов
похоже, что вы не используете менеджер безопасности:
У вас есть файл политики (my.policy
):
grant {
permission java.security.AllPermission;
};
и запустите программу, используя
java -Djava.security.manager -Djava.security.policy=/some/path/my.policy MyClass
у меня была эта проблема, потому что у меня были разные имена пакетов в коде клиента и сервера:
package my.pkg;
// server side interface definition...
// ------------- //
package my.pkg.something;
// client side interface definition...
Я изменил имя пакета на стороне клиента и установил его как имя пакета на стороне сервера:
package my.pkg;
// server side interface definition...
// ------------- //
package my.pkg; // renamed to the name of package in server-side .
// client side interface definition...
и проблема ушла.
у меня работает RMI Client
и Server
для моего класса Java. Я решил поместить их в свои собственные пакеты, а не запускать как пакет по умолчанию.
после того, как я поместил их в свои пакеты java.rmi.UnmarshalException: error unmarshalling return; nested exception is: java.lang.ClassNotFoundException:
ошибка начала происходить при подключении,.
Я вернул программы в пакет по умолчанию, и все это снова начало работать.
Я понимаю, что, вероятно, есть техническая причина для этого, но это сработало для меня!
есть три случая.
Если вы получаете ошибку при привязке к реестру, реестр не имеет доступа к этому классу по пути к классу или через функцию кодовой базы.
Если вы получаете ошибку при поиске реестра, ваш клиент не имеет доступа к этому классу по пути к классам или через функцию кодовой базы.
Если вы используете функцию кода, что, в свою очередь, может быть вызвано реестром С доступ к этому классу по его пути к классам, что заставляет его не использовать кодовую базу, что приводит к потере аннотации кодовой базы, поэтому ваш клиент не знает, как использовать кодовую базу для этого класса.
Если вы не используете функцию кодовой базы, игнорируйте предыдущий абзац; -)
Я решил его переименовать имя пакета. сервер и клиент находятся в двух разных проектах , но с одинаковым именем пакета.