【发布时间】:2015-01-09 07:43:28
【问题描述】:
我正在尝试通过 Kotlin 中的 @Context 注释将 HttpServletRequest 注入我的 JAX-RS 资源(Apache CXF 实现)。如果我通过方法参数注入它,它工作正常。但我不想用它“弄乱”我的接口,所以我想通过字段/设置器注入它。
普通字段注入的问题是代理的名称中有 $,这对于 kotlin 来说是一个问题,因为它无法使用名称中带有美元的类名。
所以我正在尝试使用这个简单的方法通过 setter 来做到这一点:
var req : HttpServletRequest? = null
Context
fun setRequest(req : HttpServletRequest) {
this.req = req
}
问题是(我相信这在 Java 中也应该是一个问题),setter 是通过 org.apache.cxf.jaxrs.utils.InjectionUtils 方法中的反射调用的,该方法在引发 java.lang.IllegalArgumentException 的方法 injectThroughMethod 中:对象不是声明类的实例
我试图用谷歌搜索这个问题,但没有成功。有没有人遇到过类似的问题或者我做错了什么?
顺便说一句,我还在 CXF 的 JIRA 中创建了一个 issue。
【问题讨论】:
-
Kotlin 可以使用名称中带有“$”的类,使用反引号进行转义:
Foo$Proxy -
我建议您在 Java 中重现相同的行为。这个问题很可能与 Kotlin 完全无关。
-
我同意这可能不是 Kotlin 的问题。这就是为什么我没有以问题的名义提出它。我已经在 JIRA 中讨论过它。我将尝试他们的建议并回顾性地更新此线程
标签: jakarta-ee jax-rs kotlin