我试图通过移植一些现有的Java代码来了解Kotlin以查看差异。我正在尝试编写一个简单的CDI Interceptor
,它允许我记录带注释的方法的开始和结束。我的拦截器和注释看起来像这样:
import javax.interceptor.InterceptorBinding
@InterceptorBinding
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.TYPE)
@Retention(AnnotationRetention.RUNTIME)
@MustBeDocumented
annotation class Logged {
}
import org.apache.log4j.Logger
import javax.interceptor.AroundInvoke
import javax.interceptor.Interceptor
import javax.interceptor.InvocationContext
@Interceptor
@Logged
class LoggingInterceptor {
@AroundInvoke
fun logFunctionDetails(context: InvocationContext): Any {
print("logFunctionDetails - start")
// TODO Implement method
print("logFunctionDetails - end")
return context.proceed()
}
}
我还有一个用@Logged注释的简单JAX-RS端点。它看起来像这样:
@Path("/healthCheck")
@Stateless
@Logged
open class HealthCheckRS : AbstractRestService() {
@Path("/")
@GET
@POST
@PUT
@DELETE
@HEAD
@OPTIONS
@Logged
open fun healthCheck(): String {
return "" + System.currentTimeMillis()
}
}
我希望看到我的LoggingInterceptor
函数被调用,但它完全绕过了拦截器。为了让这个在Kotlin工作,还有什么我需要做的吗?我有类似的代码,在Java中运行没有问题。
答案 0 :(得分:0)
信用转到Siliarus:拦截器是否启用?我在您的拦截器上没有看到@Priority
(并且您没有提到beans.xml
)。
此答案是一个占位符,因此该问题不再列在未回答的问题上。实际上,评论是解决方案。