- Notifications
You must be signed in to change notification settings - Fork 38.8k
Closed
Labels
theme: aotAn issue related to Ahead-of-time processingAn issue related to Ahead-of-time processingtheme: kotlinAn issue related to Kotlin supportAn issue related to Kotlin supporttype: enhancementA general enhancementA general enhancement
Milestone
Description
spring version: 6.1.8
example:
@RestController class DefaultController { @GetMapping("/defaultValue") fun defaultValue(@RequestParam(required = false) argument: Boolean? = null) = argument }
test:
curl localhost:8080/defaultValue {"timestamp":"2024-08-14T03:59:59.186+00:00","status":500,"error":"Internal Server Error","path":"/defaultValue"}
stack trace:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: org.graalvm.nativeimage.MissingReflectionRegistrationError: The program tried to reflectively invoke method public static java.lang.Boolean com.example.DefaultController.defaultValue$default(com.example.DefaultController,java.lang.Boolean,int,java.lang.Object) without it being registered for runtime reflection. Add it to the reflection metadata to solve this problem. See https://www.graalvm.org/latest/reference-manual/native-image/metadata/#reflection for help.] with root cause org.graalvm.nativeimage.MissingReflectionRegistrationError: The program tried to reflectively invoke method public static java.lang.Boolean com.example.DefaultController.defaultValue$default(com.example.DefaultController,java.lang.Boolean,int,java.lang.Object) without it being registered for runtime reflection. Add it to the reflection metadata to solve this problem. See https://www.graalvm.org/latest/reference-manual/native-image/metadata/#reflection for help. at org.graalvm.nativeimage.builder/com.oracle.svm.core.reflect.MissingReflectionRegistrationUtils.forQueriedOnlyExecutable(MissingReflectionRegistrationUtils.java:97) ~[na:na] at java.base@17.0.11/java.lang.reflect.Method.acquireMethodAccessor(Method.java:77) ~[com.example.ApplicationKt:na] at java.base@17.0.11/java.lang.reflect.Method.invoke(Method.java:566) ~[com.example.ApplicationKt:na] at kotlin.reflect.jvm.internal.calls.CallerImpl$Method.callMethod(CallerImpl.kt:97) ~[com.example.ApplicationKt:1.9.24-release-822] at kotlin.reflect.jvm.internal.calls.CallerImpl$Method$Static.call(CallerImpl.kt:106) ~[na:na] at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod$kotlin_reflection(KCallableImpl.kt:215) ~[com.example.ApplicationKt:1.9.24-release-822] at kotlin.reflect.jvm.internal.KCallableImpl.callBy(KCallableImpl.kt:112) ~[com.example.ApplicationKt:1.9.24-release-822] at org.springframework.web.method.support.InvocableHandlerMethod$KotlinDelegate.invokeFunction(InvocableHandlerMethod.java:334) ~[na:na] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:252) ~[com.example.ApplicationKt:6.1.11] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) ~[com.example.ApplicationKt:6.1.11] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[com.example.ApplicationKt:6.1.11] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[com.example.ApplicationKt:6.1.11] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[com.example.ApplicationKt:6.1.11] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[com.example.ApplicationKt:6.1.11] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[com.example.ApplicationKt:6.1.11] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[com.example.ApplicationKt:6.1.11] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[com.example.ApplicationKt:6.1.11] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[com.example.ApplicationKt:6.1.11]
issue reproduce repository: https://github.com/czp3009/spring-native-not-support-method-handler-with-kotlin-default-value
Possible causes:
i notice that in this issue spring finally support kotlin default value in method handler
but according to code in PR, it seems that the native hint for method handlers with method names ending in '$default' is missing
Metadata
Metadata
Assignees
Labels
theme: aotAn issue related to Ahead-of-time processingAn issue related to Ahead-of-time processingtheme: kotlinAn issue related to Kotlin supportAn issue related to Kotlin supporttype: enhancementA general enhancementA general enhancement