Надеюсь это поможет.
равляю объект Class от клиента к стороне сервера. Каждый раз, когда серверу нужно загрузить объект Class, отправленный клиентомвместо повторного использования это по модели родительского делегирования (когда она была загружена во время 1-й итерации).
Я пытаюсь использовать пользовательский загрузчик классов на стороне сервера, чейloadClass(String)
просто звонитfindClass()
вместо проверки с родительской иерархией. Чтобы добиться этого, я делаю следующее:
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
Мне нужна помощь в выяснении ошибки в моем подходе / коде.