Glassfish javaee7的拦截器问题

Glassfish javaee7的拦截器问题,glassfish,cdi,interceptor,java-ee-7,Glassfish,Cdi,Interceptor,Java Ee 7,我正在测试/切换到JavaEE7(GlassFish4),我遇到的一个问题是拦截器,每当我尝试运行项目时,我都会遇到以下错误 严重:加载app:CDI部署时出现异常 故障:WELD-001417启用的拦截器等级 com.xxxxxx.security.SecuredInterceptor位于 文件:/home/xxxxxx/xxxxxx/target/xxxxxx/WEB-INF/bean。xml@7两者都不是 注释@Interceptor,也不是通过可移植扩展注册的 我在看CDI1.1规范的第

我正在测试/切换到JavaEE7(GlassFish4),我遇到的一个问题是拦截器,每当我尝试运行项目时,我都会遇到以下错误

严重:加载app:CDI部署时出现异常 故障:WELD-001417启用的拦截器等级 com.xxxxxx.security.SecuredInterceptor位于 文件:/home/xxxxxx/xxxxxx/target/xxxxxx/WEB-INF/bean。xml@7两者都不是 注释@Interceptor,也不是通过可移植扩展注册的

我在看CDI1.1规范的第1.3.6节,它看起来没有任何变化,那么我做错了什么

这是我正在使用的代码

@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Secured {}


com.xxxxxx.security.SecuredInterceptor

似乎是与beans.xml的1.1版本相关的Glassfish bug


来自CDI规范第12.1节

包含beans.xml文件且没有版本的bean归档文件的默认bean发现模式为all


您的版本1.1 beans.xml具有
bean发现模式=“annotated”
。将beans.xml更改为
bean discovery mode=“all”
,我猜它会像从beans.xml中删除版本并使用旧名称空间一样工作,就像在CDI 1.0中一样。

拦截器打包在哪里?在战争档案里?实际上,EE7中有很多拦截器的变化。约翰是对的。控制拦截器的规则不是由CDI指定的,它们在EJB的拦截器子规范中。我只在项目中使用WAR文件,它是一个基本的Netbeans>Maven>Web应用程序项目,我刚刚开始测试EE7。
@Secured
@Interceptor
public class SecuredInterceptor implements Serializable
{
    @AroundInvoke
    public Object interceptSecured(InvocationContext ic) throws Exception
    {
        // Do Stuff
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="annotated">
    <interceptors>
        <class>com.xxxxxx.security.SecuredInterceptor</class>
    </interceptors>
</beans>