{"id":"efb23649ed1593b8","repo":"spring-projects/spring-framework","slug":"unsupported-executable","errorCode":null,"errorMessage":"Unsupported executable: {}","messagePattern":"Unsupported executable: (.+?)","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanInstanceSupplier.java","lineNumber":277,"sourceCode":"\t\t\t\tdescriptor = new ShortcutDependencyDescriptor(descriptor, shortcut);\n\t\t\t}\n\t\t\tValueHolder argumentValue = argumentValues[i];\n\t\t\tresolved[i] = resolveAutowiredArgument(\n\t\t\t\t\tregisteredBean, descriptor, argumentValue, autowiredBeanNames);\n\t\t}\n\t\tregisterDependentBeans(registeredBean.getBeanFactory(), registeredBean.getBeanName(), autowiredBeanNames);\n\n\t\treturn AutowiredArguments.of(resolved);\n\t}\n\n\tprivate MethodParameter getMethodParameter(Executable executable, int index) {\n\t\tif (executable instanceof Constructor<?> constructor) {\n\t\t\treturn new MethodParameter(constructor, index);\n\t\t}\n\t\tif (executable instanceof Method method) {\n\t\t\treturn new MethodParameter(method, index);\n\t\t}\n\t\tthrow new IllegalStateException(\"Unsupported executable: \" + executable.getClass().getName());\n\t}\n\n\tprivate ValueHolder[] resolveArgumentValues(RegisteredBean registeredBean, Executable executable) {\n\t\tParameter[] parameters = executable.getParameters();\n\t\tValueHolder[] resolved = new ValueHolder[parameters.length];\n\t\tRootBeanDefinition beanDefinition = registeredBean.getMergedBeanDefinition();\n\t\tif (beanDefinition.hasConstructorArgumentValues() &&\n\t\t\t\tregisteredBean.getBeanFactory() instanceof AbstractAutowireCapableBeanFactory beanFactory) {\n\t\t\tBeanDefinitionValueResolver valueResolver = new BeanDefinitionValueResolver(\n\t\t\t\t\tbeanFactory, registeredBean.getBeanName(), beanDefinition, beanFactory.getTypeConverter());\n\t\t\tConstructorArgumentValues values = resolveConstructorArguments(\n\t\t\t\t\tvalueResolver, beanDefinition.getConstructorArgumentValues());\n\t\t\tSet<ValueHolder> usedValueHolders = CollectionUtils.newHashSet(parameters.length);\n\t\t\tfor (int i = 0; i < parameters.length; i++) {\n\t\t\t\tClass<?> parameterType = parameters[i].getType();\n\t\t\t\tString parameterName = (parameters[i].isNamePresent() ? parameters[i].getName() : null);\n\t\t\t\tValueHolder valueHolder = values.getArgumentValue(\n\t\t\t\t\t\ti, parameterType, parameterName, usedValueHolders);","sourceCodeStart":259,"sourceCodeEnd":295,"githubUrl":"https://github.com/spring-projects/spring-framework/blob/e8729d043887bf0d0baf91e062e909b56eb2b708/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanInstanceSupplier.java#L259-L295","documentation":"BeanInstanceSupplier.getMethodParameter maps a java.lang.reflect.Executable to a MethodParameter; only Constructor and Method are supported. Any other Executable subclass triggers this IllegalStateException. In practice Java reflection only produces those two, so this is a defensive guard for an unexpected (typically framework-introduced) executable type.","triggerScenarios":"An Executable passed into the AOT/resolution path is an instance of a class that is neither java.lang.reflect.Constructor nor java.lang.reflect.Method (e.g. a custom reflective or bytecode-rewritten executable).","commonSituations":"Extremely rare; occurs when an agent, bytecode-rewriting library, or a custom reflection implementation supplies a non-standard Executable. Usually indicates a corrupted classpath or an aggressive instrumentation library.","solutions":["Identify what is injecting the non-standard Executable (agent, Mockito, Lombok rewrite, custom classloader).","Disable or update the offending instrumentation library for the AOT/native build.","If this reproduces with plain JDK reflection, isolate a minimal bean and report it - it should not occur in stock Spring."],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"Executable e = ...;\nif (!(e instanceof Constructor || e instanceof Method)) {\n  throw new IllegalStateException(\"Non-standard Executable: \" + e.getClass());\n}","typeGuard":"boolean isStandardExecutable(Executable e) {\n  return e instanceof Constructor || e instanceof Method;\n}","tryCatchPattern":null,"preventionTips":["Disable bytecode-rewriting agents during AOT unless known-compatible.","Keep the JDK standard; avoid custom reflection implementations.","If this fires, suspect instrumentation first."],"tags":["spring","aot","native","reflection","unsupported"],"analyzedSha":"e8729d043887bf0d0baf91e062e909b56eb2b708","analyzedAt":"2026-08-04T19:07:39.725Z","schemaVersion":2}