我使用Java WebSocket API声明客户端(由@ClientEndpoint注释的Java类:]
@ClientEndpoint
public class MySock {
MySock(ExecutorService exec){}
...
}
实例是通过构造函数创建的:
webSocket = new MySock(exec);
session = wsContainer.connectToServer(webSocket, url);
而且我在通过quarkus-maven-plugin构建期间出错:
[error]: Build step ...ArcProcessor#validate threw an exception:
javax.enterprise.inject.UnsatisfiedResolutionException:
Unsatisfied dependency for type ...ExecutorService and qualifiers [@Default]
- java member: edu.MySock#<init>()
- declared on CLASS bean [types=[edu.MySock, java.lang.Object], qualifiers=[@Default, @Any], target=edu.MySock]
注意:没有@Inject注释
是否可以将其作为类和实例传递给#connectToServer?
因此,如果验证处理一个悲观的案例(在该案例中验证是有用的,但它打破了一个乐观的案例,可以吗?
悲观的情况,可能未声明依赖项:
session = wsContainer.connectToServer(MySock.class, url);
在以下情况下,验证是有害的,因为它破坏了构建阶段:
session = wsContainer.connectToServer(webSocket, url);
也许完全不应该验证ClientEndpoint?
在你问我之前...我们不会在WebSocket中注入一些东西,我们也不想使用程序化端点。但是我们想为带注释的类创建一个实例。为什么不? WebSocket将复杂的逻辑封装在其内部,并且我们多次使用了此变体(例如,在WildFly上的应用程序中)。
[[最佳解决方案
对我来说仅是禁用对我的bean的验证,但是我找不到如何执行验证的想法。本文对我没有帮助https://quarkus.io/guides/cdi-reference。 beans.xml is ignored也无法帮助我的事实。
[第二方式
将来将在没有一个带有@Inject批注的类成员的情况下禁用验证。可能不正确,但是here有一些解释:首先,容器调用bean的构造函数(默认的构造函数或带注释的@Inject),以获得bean的实例。
因此,我的构造函数不是“默认”,并且我没有使用@Inject注释。
我使用Java WebSocket API声明客户端(@ClientEndpoint注释的Java类):@ClientEndpoint公共类MySock {MySock(ExecutorService exec){} ...}实例是通过...创建的]]