7

我正在测试/切换到 Java EE7(Glassfish 4),我遇到的问题之一是拦截器,每当我尝试运行项目时,我都会收到以下错误。

严重:加载应用程序时出现异常:CDI 部署失败:WELD-001417 文件中启用的拦截器类 com.xxxxxx.security.SecuredInterceptor:/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>
4

2 回答 2

5

来自 CDI 规范的第 12.1 节。

包含没有版本的 beans.xml 文件的 bean 存档具有默认的 bean 发现模式 all。

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

于 2013-07-10T06:02:44.187 回答
1

似乎是与 1.1 版 beans.xml 相关的 Glassfish 错误

https://java.net/jira/browse/GLASSFISH-20667

于 2013-07-02T06:01:15.780 回答