У меня следующая ситуация:
При использовании RMI я заметил, что в конкретной ситуации у клиента RMI не было класса, экземпляр которого был отправлен через RMI.Итак, я отправил класс в форме Byte [], а затем загрузил его с загрузчиком класса, который я определил.
Код на стороне клиента выглядит примерно так:
pp = plugins.getPanelClasses(); //RMI method
panelClassLoader pcl = new panelClassLoader(); //simple class loader defined by me
String name = pcl.defineClass(pp);
Тогдая спрашиваю на стороне клиента экземпляр загруженного класса:
HashMap<String, PluginPanel> panels = null;
try
{
panels = plugins.getSettingsPanels();
} catch (RemoteException ex)
{
Logger.getLogger(ServerOptions.class.getName()).log(Level.SEVERE, null, ex);
}
PluginPanel - это интерфейс, чьи реализующие классы не всегда находятся в клиенте ...
и загрузчик классовis:
private class panelClassLoader extends ClassLoader
{
public panelClassLoader(ClassLoader parent)
{
super(parent);
}
public panelClassLoader()
{
super(getSystemClassLoader());
}
public String defineClass(byte[] b)
{
Class c = super.defineClass(null, b, 0, b.length);
resolveClass(c);
return c.getName();
}
}
Тем не менее, я застрял со следующей ошибкой: java.rmi.UnmarshalException: ошибка unmarshalling return;Вложенное исключение: java.lang.ClassNotFoundException: pt.ua.dicoogle.IndexPlugin.CPanel (нет менеджера безопасности: загрузчик классов RMI отключен) в sun.rmi.server.UnicastRef.invoke (UnicastRef.java:178) в java.rmiДоменwindows.ServerOptions. (ServerOptions.java:176)
Причина: java.lang.ClassNotFoundException: pt.ua.dicoogle.IndexPlugin.CPanel (без менеджера безопасности: загрузчик классов RMI отключен) в sun.rmi.server.LoaderHandler.loadClass (LoaderHandler.java:375) в sun.rmi.server.LoaderHandler.loadClass (LoaderHandler.java:165) в java.rmi.server.RMIClassLoader $ 2.loadClass (RMIClassLoader.java:620) в java.rmi.server.RMIClassLoader.loadClass (RMIClassLoader.java:247) в sun.rmi.server.MarshalInputStream.resolveClass (MarshalInputStream.java:197) в java.io.ObjectInputStream.readNonProxyDesc (ObjectInputStream.java:1574) в java.io.ObjectInputStream.readClassDesc (ObjectInputStream.java:1495) в java.io.ObjectInputStream.readOrdInStbject.jectOject) в java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1328) в java.io.ObjectInputStream.readObject (ObjectInputStream.java:350) в java.util.HashMap.readObject (HashMap.java:1030) на солнце..NativeMethodAccessorImpl.invoke0 (нативный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (methodava.hoke.jref.jref.jj.java: 597) в java.io.ObjectStreamClass.invokeReadObject (ObjectStreamClass.java:974) в java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1848) в java.io.ObjectInputStream.readOrdinaryObject (jj)в java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1328) в java.io.ObjectInputStream.readObject (ObjectInputStream.java:350) в sun.rmi.server.UnicastRef.unmarshalValue (UnicastRef.java:306) в sun.rmi.server.UnicastRef.invoke (UnicastRef.java:155)
Любое предложение?