0

在 Airpal 中使用 Guice 作为 DI 框架,在我的项目中,我们使用 glassfish 4.1 payara 服务器 RESTful Web 服务,Jersey 版本 2.21。问题 1:如果使用 Guice 有一些运行时异常

部署期间发生错误:加载应用程序时出现异常:CDI 部署失败:WELD-001409:在注入点 [UnbackedAnnotatedField] @Inject private org.hibernate.validator.internal.cdi.interceptor.ValidationInterceptor 具有限定符 @Default 的类型验证器的不明确依赖项.validator at org.hibernate.validator.internal.cdi.interceptor.ValidationInterceptor.validator(ValidationInterceptor.java:0) 可能的依赖关系:- org.apache.bval.cdi.ValidatorBean@33aeb01,- ValidatorBean [id=org.hibernate. validator.internal.cdi.ValidatorBean_default] 。有关详细信息,请参阅 server.log。

问题2:如果不使用 Guice 如何在球衣 2.21 RESTful 中绑定空运客户端。

请帮我。任何人都知道这个问题谁正在使用 Airpal+presto+glassfish4.1+jersey2.21+maven3.0

4

1 回答 1

0

似乎由于 Guice 和标准 Java EE CDI 都使用相同的@Inject注解,因此触发了 CDI 机制但无法找到依赖项,因为您的应用程序配置了 Guice。

GlassFish/Payara 最简单的解决方案是在部署应用程序时禁用隐式 CDI(部署时管理控制台中有一个复选框,或者 asadmin 命令的选项)。

您也可以在 XML 描述符中禁用应用程序存档中的 CDI。查看有关禁用 CDI 或过滤 CDI 扫描的 Payara Server 文档。请注意,大多数选项仅在 Payara Server 中可用,而在 GlassFish 4.1 中不可用。

CDI 是通过以下方式触发的 - 放入beans.xml您的应用程序(我不希望您将它放在那里,因为您使用的是 Guice,但请检查它是否由于某种原因不是由您的 IDE 生成的)- 注释一个或多个类带有触发 CDI 的注释 - 例如任何 EJB 注释 ( @Stateless, @Stateful,...)

于 2017-05-01T10:10:35.720 回答