2016-09-23 2 views
2

Ich bin hier wirklich ratlos. Ich habe unsere Spring-Bibliotheken von 4.0.6 auf 4.3.2 aktualisiert. Einer unserer Tests schlägt fehl, wenn er mit 4.3.2 ausgeführt wird Frage:.ClassFormatError: Doppelter Methodenname & Signatur von EnhancerBySpringCGLIB

@Bean(name = SCHEDULER_FACTORY) 
public SchedulerFactoryBean getSchedulerFactory() 
{ 
    SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean(); 
    schedulerFactory.setConfigLocation(schedulerConfig); 
    schedulerFactory.setResourceLoader(null); 
    schedulerFactory.setDataSource(dataSource); 
    schedulerFactory.setJobFactory(getSchedulerJobFactory()); 
    schedulerFactory.setAutoStartup(false); 

    return schedulerFactory; 
} 

@Bean(name = SCHEDULER) 
public Scheduler getScheduler() 
{ 
    return getSchedulerFactory().getScheduler(); 
} 

ich erhalte den Fehler java.lang.ClassFormatError: Duplicate method name&signature in class file org/springframework/scheduling/quartz/SchedulerFactoryBean$$EnhancerBySpringCGLIB$$bee87fe8$$EnhancerBySpringCGLIB$$6bb26669

den Test Lauf 4.0.6 Framework Feder arbeitet völlig in Ordnung, aber mit 4.3.2, es versagt, wenn 4.0.6 verwenden, ich. benutzte cglib no dependencies library. Mit 4.3.2 scheiterten die Tests unabhängig davon, ob ich cglib verwende oder nicht.

Spring bettet cglib und objensis in die 4.3. * Kernbibliothek ein. "Außerdem enthält Spring Framework 4.3 die aktualisierte Version 5.1, CGLIB 3.2.4 und Objenesis 2.4 in spring-core.jar." SpringDocs

Wir verwendeten Java 8 und cglib-no-dep 2.2 mit Spring Framework 4.0.6. Wir haben versucht, diesen Code mit und ohne die eigenständige Bibliothek auszuführen und die gleichen Ergebnisse zu sehen.

Stapelüberwachung:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.quartz.Scheduler]: Factory method 'getScheduler' threw exception; nested exception is org.springframework.cglib.core.CodeGenerationException:java.lang.reflect.InvocationTargetException >null 
      at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 
      at org.springframework.beans.factory.support.ConstructorResolver$3.run(ConstructorResolver.java:582) 
      at java.security.AccessController.doPrivileged(Native Method) 
      at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:579) 
      ... 112 more 
    Caused by: org.springframework.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException >null 
      at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:345) 
      at org.springframework.cglib.proxy.Enhancer.generate(Enhancer.java:492) 
      at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:93) 
    Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 188.486 sec 
      at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91) 
      at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
      at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) 
      at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) 
      at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:116) 
      at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:291) 
      at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:480) 
      at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:337) 
      at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.enhanceFactoryBean(ConfigurationClassEnhancer.java:452) 
      at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:338) 
      at com.example.SpringConfiguration$$EnhancerBySpringCGLIB$$54d3cb35.getSchedulerFactory(<generated>) 
      at com.example.SpringConfiguration.getScheduler(SpringConfiguration.java:242) 
      at com.example.SpringConfiguration$$EnhancerBySpringCGLIB$$54d3cb35.CGLIB$getScheduler$24(<generated>) 
      at com.example.SpringConfiguration$$EnhancerBySpringCGLIB$$54d3cb35$$FastClassBySpringCGLIB$$a2a6e004.invoke(<generated>) 
      at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
      at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356) 
      at com.example.SpringConfiguration$$EnhancerBySpringCGLIB$$54d3cb35.getScheduler(<generated>) 
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
      at java.lang.reflect.Method.invoke(Method.java:498) 
      at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
      ... 115 more 
    Caused by: java.lang.reflect.InvocationTargetException 
      at sun.reflect.GeneratedMethodAccessor26.invoke(Unknown Source) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
      at java.lang.reflect.Method.invoke(Method.java:498) 
      at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:413) 
      at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:336) 
      ... 140 more 
    Caused by: java.lang.ClassFormatError: Duplicate method name&signature in class file org/springframework/scheduling/quartz/SchedulerFactoryBean$$EnhancerBySpringCGLIB$$bee87fe8$$EnhancerBySpringCGLIB$$6bb26669 
      at java.lang.ClassLoader.defineClass1(Native Method) 
      at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
      ... 145 more 

Antwort

0

Dies ist auf jeden Fall ein Fehler in cglib. Es scheint, als ob es eine Methode in der Typhierarchie nicht gleich festlegt, um einer anderen Methode gleich zu sein. Verwenden Sie Java 8 in Verbindung mit Standardmethoden in Schnittstellen?

Cglib ist nicht wirklich auf moderne Java-Versionen getestet und hat nur wenig Wartung. Neuere Funktionen verursachen manchmal Probleme bei der Verwendung der Bibliothek.

+0

Spring bettet cglib und objensis in die 4.3. * Kernbibliothek ein. "Darüber hinaus bettet Spring Framework 4.3 die aktualisierte ASM 5.1, CGLIB 3.2.4 und Objenesis 2.4 in Frühjahr-core.jar." http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#_support_for_new_library_and_server_generations Wir verwendeten Java 8 und cglib-no-dep 2.2 mit Spring Framework 4.0.6. Wir haben versucht, diesen Code mit und ohne die eigenständige Bibliothek auszuführen und die gleichen Ergebnisse zu sehen. Was macht Sie so sicher, dass es ein Problem mit CGLIB und nicht Frühling ist? – user3416827

+0

Weil ein 'ClassFormatError' ausgelöst wird, wenn die Java Virtual Machine versucht, eine Klassendatei zu lesen, und feststellt, dass die Datei fehlerhaft ist oder anderweitig nicht als Klassendatei interpretiert werden kann *. Von den genannten Bibliotheken generiert nur cglib Laufzeit-JAR-Dateien. –