Quarkus:Web套接字ClientEndpoint的构建时验证

问题描述 投票:0回答:1

我使用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-referencebeans.xml is ignored也无法帮助我的事实。

[第二方式

将来将在没有一个带有@Inject批注的类成员的情况下禁用验证。可能不正确,但是here有一些解释:

首先,容器调用bean的构造函数(默认的构造函数或带注释的@Inject),以获得bean的实例。

因此,我的构造函数不是“默认”,并且我没有使用@Inject注释。

我使用Java WebSocket API声明客户端(@ClientEndpoint注释的Java类):@ClientEndpoint公共类MySock {MySock(ExecutorService exec){} ...}实例是通过...创建的]]

java validation cdi quarkus eclipse-jee
1个回答
0
投票
解决方案非常简单:@ javax.enterprise.inject.Vetoed注释禁用bean进行验证
© www.soinside.com 2019 - 2024. All rights reserved.