Skip to content

ResolverError occurs when linking with Spring Security #410

Closed as not planned

Description

@teipub

I use graphql-spring-boot-starter 7.1.0 version.

My code.

@Component
class AuthResolver(val jwtUserService: JWTUserService,
                   val authenticationProvider: AuthenticationProvider)
    : GraphQLQueryResolver {
    @PreAuthorize("isAuthenticated()")
    fun getToken(): String? {
        return "token"
    }
}

then

Caused by: graphql.kickstart.tools.ResolverError: Resolvers may not have java.lang.Void as their type, use a real type or use a root resolver interface.
	at graphql.kickstart.tools.NormalResolverInfo.findDataClass(ResolverInfo.kt:37) ~[graphql-java-tools-6.1.0.jar:na]
	at graphql.kickstart.tools.NormalResolverInfo.<init>(ResolverInfo.kt:27) ~[graphql-java-tools-6.1.0.jar:na]
	at graphql.kickstart.tools.SchemaClassScanner$resolverInfos$1.invoke(SchemaClassScanner.kt:32) ~[graphql-java-tools-6.1.0.jar:na]
	at graphql.kickstart.tools.SchemaClassScanner$resolverInfos$1.invoke(SchemaClassScanner.kt:15) ~[graphql-java-tools-6.1.0.jar:na]
	at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:172) ~[kotlin-stdlib-1.3.72.jar:1.3.72-release-468 (1.3.72)]
	at kotlin.sequences.SequencesKt___SequencesKt.toCollection(_Sequences.kt:722) ~[kotlin-stdlib-1.3.72.jar:1.3.72-release-468 (1.3.72)]
	at kotlin.sequences.SequencesKt___SequencesKt.toMutableList(_Sequences.kt:752) ~[kotlin-stdlib-1.3.72.jar:1.3.72-release-468 (1.3.72)]
	at kotlin.sequences.SequencesKt___SequencesKt.toList(_Sequences.kt:743) ~[kotlin-stdlib-1.3.72.jar:1.3.72-release-468 (1.3.72)]
	at graphql.kickstart.tools.SchemaClassScanner.<init>(SchemaClassScanner.kt:32) ~[graphql-java-tools-6.1.0.jar:na]
	at graphql.kickstart.tools.SchemaParserBuilder.scan(SchemaParserBuilder.kt:153) ~[graphql-java-tools-6.1.0.jar:na]
	at graphql.kickstart.tools.SchemaParserBuilder.build(SchemaParserBuilder.kt:195) ~[graphql-java-tools-6.1.0.jar:na]
	at graphql.kickstart.tools.boot.GraphQLJavaToolsAutoConfiguration.schemaParser(GraphQLJavaToolsAutoConfiguration.java:151) ~[graphql-kickstart-spring-boot-autoconfigure-tools-7.1.0.jar:na]
	at graphql.kickstart.tools.boot.GraphQLJavaToolsAutoConfiguration$$EnhancerBySpringCGLIB$$f90217e.CGLIB$schemaParser$3(<generated>) ~[graphql-kickstart-spring-boot-autoconfigure-tools-7.1.0.jar:na]
	at graphql.kickstart.tools.boot.GraphQLJavaToolsAutoConfiguration$$EnhancerBySpringCGLIB$$f90217e$$FastClassBySpringCGLIB$$dcce5f6_4.invoke(<generated>) ~[graphql-kickstart-spring-boot-autoconfigure-tools-7.1.0.jar:na]
	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.2.7.RELEASE.jar:5.2.7.RELEASE]
	at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]
	at graphql.kickstart.tools.boot.GraphQLJavaToolsAutoConfiguration$$EnhancerBySpringCGLIB$$f90217e.schemaParser(<generated>) ~[graphql-kickstart-spring-boot-autoconfigure-tools-7.1.0.jar:na]
	at graphql.kickstart.tools.boot.GraphQLJavaToolsAutoConfiguration$HOTSWAPAGENT_$$FastClassBySpringCGLIB$$21217c45_4.invoke(<generated>) ~[graphql-kickstart-spring-boot-autoconfigure-tools-7.1.0.jar:na]
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.7.RELEASE.jar:5.2.7.RELEASE]
	at HotswapSpringCallback_1796692748.intercept(HotswapSpringCallback_1796692748.java) ~[graphql-spring-boot-autoconfigure-7.1.0.jar:na]
	at graphql.kickstart.tools.boot.GraphQLJavaToolsAutoConfiguration$HOTSWAPAGENT_$$EnhancerBySpringCGLIB$$ec2b5acc_2.schemaParser(<generated>) ~[graphql-kickstart-spring-boot-autoconfigure-tools-7.1.0.jar:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE]

But, If @PreAuthorize("isAuthenticated()") is deleted, it works.

How can I fix it?

Activity

  1. oryan-block commented on Oct 3, 2026

    @oryan-block
    Collaborator

    Closing since I can't reproduce this on 14.x. A query resolver behind a Spring AOP CGLIB proxy (the Spring Boot default) builds and resolves fine. The Void error is only thrown for a resolver that isn't a GraphQLQueryResolver instance, and no standard Spring proxy produces that. Your stack trace shows HotswapAgent-enhanced classes, so the cause is likely there. While checking this I found a separate bug with JDK dynamic proxies, filed as #822. Please reopen with a minimal repro against 14.x if you still see this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions