Исключения remoteexception Ява.РМО.UnmarshalException: ошибка unmarshalling возврат [дубликат]

этот вопрос уже есть ответ здесь:

Я запускаю программу здесь на 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: ошибка начала происходить при подключении,.

Я вернул программы в пакет по умолчанию, и все это снова начало работать.

Я понимаю, что, вероятно, есть техническая причина для этого, но это сработало для меня!


есть три случая.

  1. Если вы получаете ошибку при привязке к реестру, реестр не имеет доступа к этому классу по пути к классу или через функцию кодовой базы.

  2. Если вы получаете ошибку при поиске реестра, ваш клиент не имеет доступа к этому классу по пути к классам или через функцию кодовой базы.

  3. Если вы используете функцию кода, что, в свою очередь, может быть вызвано реестром С доступ к этому классу по его пути к классам, что заставляет его не использовать кодовую базу, что приводит к потере аннотации кодовой базы, поэтому ваш клиент не знает, как использовать кодовую базу для этого класса.

  4. Если вы не используете функцию кодовой базы, игнорируйте предыдущий абзац; -)


Я решил его переименовать имя пакета. сервер и клиент находятся в двух разных проектах , но с одинаковым именем пакета.