Throw at build for resolvers that can't be called on their JDK dynamic proxy in 15.0.0
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 新手友好度
- 76/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- graphql, kotlin, spring
调研方向
Read SchemaClassScanner#warnIfNotCallableOnResolver and the existing FieldResolverError implementation to see how resolver errors are reported. Update SchemaParserTest's “parser handles spring AOP proxied resolvers by default” test to verify the error, including when the resolver fallback options are enabled. Add the change to the 15.0.0 release notes; done means the warning becomes an error with the same message and the tests pass.
由索引模型根据 Issue 内容生成。
描述
Since #853, tools warns at build when a resolver is a JDK dynamic proxy (e.g. Spring AOP with proxyTargetClass = false) and a field resolves to a method or public field the proxy can't call. Spring4AopProxyHandler makes the scanner match fields against the target class, but the proxy only implements the target's interfaces, so every query of those fields fails:
class ProxiedQuery : GraphQLQueryResolver {
fun test() = "ok"
}
val resolver = ProxyFactory(ProxiedQuery()).proxy as GraphQLQueryResolver
object of type jdk.proxy2.$Proxy2 is not an instance of ProxiedQuery
For a public field it's Can not get final int field ProxiedQuery.count on jdk.proxy2.$Proxy2. For a field, the message says to add a getter as well, since class-based proxies don't pass field reads to the target either. The build logs this once per field:
Field 'Query.test' resolves to scenarios.ProxiedQuery.test, but the resolver is a jdk.proxy2.$Proxy2, which isn't a scenarios.ProxiedQuery, so every query of the field will fail. This happens with JDK dynamic proxies, which only implement interfaces. Use class-based proxies instead, e.g. proxyTargetClass = true in Spring.
A field that can never work should fail the build. But a schema whose broken field is never queried builds and runs fine today, so throwing has to wait for a major release.
What to change
- replace the warning in
SchemaClassScanner#warnIfNotCallableOnResolverwith aFieldResolverErrorthat keeps the same message - throw it even with
allowUnimplementedResolversormissingResolverDataFetcherset, since the resolver exists but can't be called - turn
SchemaParserTest."parser handles spring AOP proxied resolvers by default", which only builds today, into a test for the error - mention it in the 15.0.0 release notes
- 主要语言
- Kotlin
- 星标
- 824
- 派生
- 175
- 平均合并
- 2 天 1 小时
- 30 天内合并 PR
- 59
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
graphql-java-kickstart/graphql-java-tools 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 85/100
graphql-java-kickstart/graphql-java-tools#893 ·
维护者通常 1 天内回复
-
enhancement
难度 5/5 一周以上 新手友好度 35/100
graphql-java-kickstart/graphql-java-tools#905 ·
维护者通常 1 天内回复
-
难度 3/5 1-2 天 新手友好度 48/100
graphql-java-kickstart/graphql-java-tools#900 ·
维护者通常 1 天内回复
-
难度 3/5 1-2 天 新手友好度 72/100
graphql-java-kickstart/graphql-java-tools#889 ·
维护者通常 1 天内回复
-
enhancement
难度 3/5 1-2 天 新手友好度 72/100
graphql-java-kickstart/graphql-java-tools#884 ·
维护者通常 1 天内回复
查看 graphql-java-kickstart/graphql-java-tools 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 70/100
mcnaveen/health-connect-webhook#110 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 65/100
tanujnotes/Olauncher#770 ·
-
难度 2/5 1-3 小时 新手友好度 66/100
-
area:ide bug platform:intellij
难度 2/5 1-3 小时 新手友好度 78/100
anthropics/claude-code#104508 ·
维护者通常 1 天内回复
-
难度 1/5 1 小时以内 新手友好度 78/100
维护者通常 1 天内回复