我正在测试/切换到Java EE7(Glassfish 4),我遇到的问题之一是拦截器,每当我尝试运行项目时,我都会收到以下错误。
严重:加载应用时出现异常:CDI部署 失败:WELD-001417启用拦截器类 com.xxxxxx.security.SecuredInterceptor in 文件:/home/xxxxxx/xxxxxx/target/xxxxxx/WEB-INF/beans.xml@7既不是 带注释的@Interceptor,也没有通过便携式扩展注册
我正在看CDI 1.1规范的第1.3.6节,它看起来没有任何改变,所以我做错了什么?
这是我正在使用的代码;
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Secured {}
@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>
答案 0 :(得分:5)
来自CDI规范的第12.1节
包含没有版本的beans.xml文件的bean归档文件具有默认的bean发现模式。
您的1.1版beans.xml有bean-discovery-mode="annotated"
。将beans.xml更改为bean-discovery-mode="all"
,我的猜测是它会像从beans.xml中删除版本并使用旧命名空间一样工作,就像在CDI 1.0中一样。
答案 1 :(得分:1)
似乎是与bean.xml 1.1版本相关的Glassfish错误