Details
-
Bug
-
Resolution: Done
-
Neutral
-
6.2.35
-
None
-
Empty show more show less
-
Yes
-
Yes
-
Yes
Description
Steps to reproduce
public class InterceptorTest { interface Base<T>{ void foo(T arg); } // Inheriting from a parametrized base class causes the JVM to generate a bridge method, which in // turn will trigger the code path in bindInterceptor() that leads to the problem. public static class Impl implements Base<String > { @Override public void foo(String arg) { } } @Test void test() { Injector injector = Guice.createInjector(new AbstractModule() { @Override protected void configure() { bindInterceptor( Matchers.any(), Matchers.any(), invocation -> null ); bind(Impl.class); } }); } }
Compile and run InterceptorTest with Java 17.
Note: it is not clear how to automate this test as Magnolia 6.2 does not compile and build against Java 17 currently.
Expected results
The test passes.
Actual results
The test fails:
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalArgumentException: Unsupported class file major version 61Â Â at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2051) Â Â at com.google.common.cache.LocalCache.get(LocalCache.java:3951) Â Â at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974) Â Â at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4958) Â Â at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4964) Â Â at com.google.inject.internal.FailableCache.get(FailableCache.java:51) Â Â at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:48) Â Â at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:155) Â Â at com.google.inject.internal.InjectorImpl.initializeBinding(InjectorImpl.java:581) Â Â at com.google.inject.internal.AbstractBindingProcessor$Processor$1.run(AbstractBindingProcessor.java:176) Â Â at com.google.inject.internal.ProcessedBindingData.initializeBindings(ProcessedBindingData.java:49) Â Â at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:122) Â Â at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106) Â Â at com.google.inject.Guice.createInjector(Guice.java:87) Â Â at com.google.inject.Guice.createInjector(Guice.java:69) Â Â at com.google.inject.Guice.createInjector(Guice.java:59) Â Â at info.magnolia.addon.commons.cache.InterceptorTest.test(InterceptorTest.java:37) Â Â at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) Â Â at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) Â Â at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) Â Â at java.base/java.lang.reflect.Method.invoke(Method.java:568) Â Â at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:675) Â Â at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) Â Â at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:125) Â Â at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:132) Â Â at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:124) Â Â at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:74) Â Â at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) Â Â at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) Â Â at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:104) Â Â at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:62) Â Â at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:43) Â Â at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:35) Â Â at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) Â Â at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) Â Â at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:202) Â Â at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) Â Â at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:198) Â Â at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) Â Â at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135) Â Â at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) Â Â at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) Â Â at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) Â Â at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Â Â at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) Â Â at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) Â Â at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) Â Â at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) Â Â at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Â Â at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) Â Â at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) Â Â at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) Â Â at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) Â Â at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) Â Â at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) Â Â at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) Â Â at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) Â Â at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229) Â Â at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197) Â Â at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211) Â Â at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191) Â Â at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128) Â Â at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) Â Â at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) Â Â at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) Â Â at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) Â Â at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) Â Â at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 61 Â Â at com.google.inject.internal.asm.$ClassReader.<init>(ClassReader.java:184) Â Â at com.google.inject.internal.asm.$ClassReader.<init>(ClassReader.java:166) Â Â at com.google.inject.internal.asm.$ClassReader.<init>(ClassReader.java:152) Â Â at com.google.inject.internal.asm.$ClassReader.<init>(ClassReader.java:273) Â Â at com.google.inject.internal.cglib.core.$DuplicatesPredicate.<init>(DuplicatesPredicate.java:93) Â Â at com.google.inject.internal.cglib.proxy.$Enhancer.getMethods(Enhancer.java:557) Â Â at com.google.inject.internal.cglib.proxy.$Enhancer.getMethods(Enhancer.java:535) Â Â at com.google.inject.internal.ProxyFactory.<init>(ProxyFactory.java:87) Â Â at com.google.inject.internal.ConstructorInjectorStore.createConstructor(ConstructorInjectorStore.java:82) Â Â at com.google.inject.internal.ConstructorInjectorStore.access$000(ConstructorInjectorStore.java:29) Â Â at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:37) Â Â at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:33) Â Â at com.google.inject.internal.FailableCache$1.load(FailableCache.java:40) Â Â at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529) Â Â at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278) Â Â at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155) Â Â at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045) Â Â ... 81 more
Workaround
Use Java 11.
Development notes
- This happens to customer projects using @Cacheable annotations. See SUPPORT-16042 and this reproducer.
- According to mgeljic " if a customer successfully builds a module w/ 17 and puts it on the classpath, our runtime should support it, even if we ourselves are not building with 17."
Root cause analysis
The is caused by Guice 4.2.2's shaded version of asm not being compatible with Java 17. In ClassFileReader it checks the class file version and fails:
if (checkClassVersion && this.readShort(classFileOffset + 6) > 58) { throw new IllegalArgumentException("Unsupported class file major version " + this.readShort(classFileOffset + 6)); }
To fix this we need to upgrade to Guice 5.1.0. See  DEV-2014 for the related effort on 6.3.
Checklists
Attachments
Issue Links
- depends upon
-
ANALYTICS-487 Update Guice to 5.1.0
-
- Closed
-
-
BLOSSOM-315 Update Guice to 5.1.0
-
- Closed
-
-
BUILD-1093 Update Guice to 5.1.0
-
- Closed
-
-
ECOMMERCE-574 Update Guice to 5.1.0
-
- Closed
-
-
MAGNOLIA-8959 Update Guice to 5.1.0
-
- Closed
-
-
MGNLCE-351 Update Guice to 5.1.0
-
- Closed
-
-
MGNLFORM-390 Update Guice to 5.1.0
-
- Closed
-
-
MGNLRES-397 Update Guice to 5.1.0
-
- Closed
-
-
MGNLSSO-295 Update Guice to 5.1.0
-
- Closed
-
-
MGNLUI-8125 Update Guice to 5.1.0
-
- Closed
-
-
SECURITY-66 Update Guice to 5.1.0
-
- Closed
-