Kotlin CDI拦截器未被调用

时间:2018-03-26 14:51:54

标签: java kotlin cdi interceptor

我试图通过移植一些现有的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中运行没有问题。

1 个答案:

答案 0 :(得分:0)

信用转到Siliarus:拦截器是否启用?我在您的拦截器上没有看到@Priority(并且您没有提到beans.xml)。

此答案是一个占位符,因此该问题不再列在未回答的问题上。实际上,评论是解决方案。