Skip to content

NoSuchMethodError when using AnnotatedElementAdapter with Java 7 [SPR-14872] #19438

Closed
@spring-projects-issues

Description

@spring-projects-issues

Andy Wilkinson opened SPR-14872 and commented

The changes made in this commit don't appear to work on Java 7. It looks like AnnotatedElementAdapter is relying on isAnnotationPresent(Class<? extends Annotation>) being provide as a default method. That's not the case when running on Java 7. An example of the failure is:

java.lang.AbstractMethodError: org.springframework.core.convert.TypeDescriptor$AnnotatedElementAdapter.isAnnotationPresent(Ljava/lang/Class;)Z
	at org.springframework.core.annotation.AnnotatedElementUtils.isAnnotated(AnnotatedElementUtils.java:272)
	at org.springframework.core.convert.TypeDescriptor.hasAnnotation(TypeDescriptor.java:243)
	at org.springframework.format.support.FormattingConversionService$AnnotationPrinterConverter.matches(FormattingConversionService.java:246)
	at org.springframework.core.convert.support.GenericConversionService$ConvertersForPair.getConverter(GenericConversionService.java:668)
	at org.springframework.core.convert.support.GenericConversionService$Converters.getRegisteredConverter(GenericConversionService.java:566)
	at org.springframework.core.convert.support.GenericConversionService$Converters.find(GenericConversionService.java:551)
	at org.springframework.core.convert.support.GenericConversionService.getConverter(GenericConversionService.java:269)
	at org.springframework.core.convert.support.GenericConversionService.canConvert(GenericConversionService.java:159)
	at org.springframework.core.convert.support.GenericConversionService.canConvert(GenericConversionService.java:149)
	at org.springframework.binding.convert.service.GenericConversionService.getConversionExecutor(GenericConversionService.java:159)
	at org.springframework.binding.convert.service.GenericConversionService.executeConversion(GenericConversionService.java:345)
	at org.springframework.binding.expression.el.BindingValueExpression.convertValueIfNecessary(BindingValueExpression.java:99)
	at org.springframework.binding.expression.el.BindingValueExpression.getValue(BindingValueExpression.java:55)
	at org.springframework.binding.expression.el.ELExpression.getValue(ELExpression.java:54)
	at org.springframework.binding.expression.el.ELExpressionParserTests.testGetValueWithCoersion(ELExpressionParserTests.java:160)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at junit.framework.TestCase.runTest(TestCase.java:176)
	at junit.framework.TestCase.runBare(TestCase.java:141)
	at junit.framework.TestResult$1.protect(TestResult.java:122)
	at junit.framework.TestResult.runProtected(TestResult.java:142)
	at junit.framework.TestResult.run(TestResult.java:125)
	at junit.framework.TestCase.run(TestCase.java:129)
	at junit.framework.TestSuite.runTest(TestSuite.java:252)
	at junit.framework.TestSuite.run(TestSuite.java:247)
	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:86)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:49)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:64)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:50)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
	at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
	at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:106)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
	at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:360)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)

Affects: 4.3.4

Issue Links:

Referenced from: commits 17863df, be853d4

Metadata

Metadata

Assignees

Labels

in: coreIssues in core modules (aop, beans, core, context, expression)type: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions