Надеюсь это поможет.

равляю объект Class от клиента к стороне сервера. Каждый раз, когда серверу нужно загрузить объект Class, отправленный клиентомвместо повторного использования это по модели родительского делегирования (когда она была загружена во время 1-й итерации).

Я пытаюсь использовать пользовательский загрузчик классов на стороне сервера, чейloadClass(String) просто звонитfindClass() вместо проверки с родительской иерархией. Чтобы добиться этого, я делаю следующее:

Создайте byte [], прочитав файл .class на стороне клиента следующим образом:
Class cl = com.example.XYZ.class;
String path = cl.getName().replace('.', '/') + ".class";
InputStream is = cl.getClassLoader().getResourceAsStream(path);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int data = -1;
while((data=is.read())!=-1)
  bos.write(data);
byte[] classBinaryData = bos.toByteArray();

я отправляюclassBinaryData на стороне сервера.

На стороне сервера каждый раз, когда я получаюbyte[]Проверьте, совпадает ли она с клиентской стороной, сопоставив контрольную сумму MD5, затем я создаю новый экземпляр моего пользовательского загрузчика классов и передаю байтовый массив, чтобы его можно было использовать при вызове.defineClass изнутриfindClass.

Тем не менее, я получаю любую из ошибок (в зависимости от способа создания байта [] из .class)

Incompatible magic value ..... in class file <Unknown>

ИЛИ ЖЕ

com/example/XYZ (wrong name: com/example/XYZ) приходящий изdefineClass

Мне нужна помощь в выяснении ошибки в моем подходе / коде.

Ответы на вопрос(0)

Ваш ответ на вопрос