CGLIB ClassNotFoundException, когда класс присутствуетJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 CGLIB ClassNotFoundException, когда класс присутствует

Сообщение Anonymous »


Я использую CGLIB для создания класса, расширяющего частный класс. Однако когда я вызываю Enhancer#create(Class[], Object[]), я получаю исключение ClassNotFoundException для net.sf.cglib.proxy.Factory. Я добавил проверку перед вызовом функции создания, чтобы убедиться, что класс присутствует во время выполнения:

System.out.println("Загруженная фабрика: " + (ProxyTest.class.getClassLoader().loadClass("net.sf.cglib.proxy.Factory") != null)); Enhancer Enhancer = новый Enhancer(); Enhancer.setSuperclass(Class.forName("com.whatever.SomePrivateClass")); // ... Object isntance = Enhancer.create(new Class[] { /*...*/ }, новый Object[] { /*...*/ }); Вот результат:

Загруженная фабрика: true Исключение в потоке «основной» net.sf.cglib.core.CodeGenerationException: java.lang.reflect.IndictionTargetException --> null в net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:348) в net.sf.cglib.proxy.Enhancer.generate(Enhancer.java:492) в net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:96) в net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:94) в net.sf.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) в java.util.concurrent.FutureTask.run(FutureTask.java:266) в net.sf.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) в net.sf.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) в net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:119) в net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:294) в net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:480) в net.sf.cglib.proxy.Enhancer.create(Enhancer.java:324) на com.cardinal.ProxyTest.main(ProxyTest.java:33) Вызвано: java.lang.reflect.IndictionTargetException. в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:498) в net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:459) в net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:339) ... еще 12 Вызвано: java.lang.NoClassDefFoundError: net/sf/cglib/proxy/Factory в java.lang.ClassLoader.defineClass1 (собственный метод) в java.lang.ClassLoader.defineClass(ClassLoader.java:756) ... еще 18 Вызвано: java.lang.ClassNotFoundException: net.sf.cglib.proxy.Factory в java.net.URLClassLoader.findClass(URLClassLoader.java:382) в java.lang.ClassLoader.loadClass(ClassLoader.java:418) в java.lang.ClassLoader.loadClass(ClassLoader.java:351) ... еще 20 Класс явно существует, так почему же это происходит?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»