gpt4 book ai didi

java - Jetty Embedded, Jersey 2, Weld

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:42 24 4
gpt4 key购买 nike

我正在使用 Jetty 9.1 和 Jersey 2.5.1。 Jersey 内置了对 Jetty 的支持,所以我这样启动我的服务器:

public static void main(String[] args) {

URI baseUri = UriBuilder.fromUri("http://localhost/").port(8080).build();
ResourceConfig config = ResourceConfig.forApplicationClass(MyApplication.class);

Server server = JettyHttpContainerFactory.createServer(baseUri, config);
}

MyApplication 只需调用 this.packages(...) 来查找我的 REST api 类。

但是,REST api 类包含一个 @Inject 注释字段,它应该由 WELD 注入(inject)。显然 WELD 未启动(未启用 CDI 支持),而且更奇怪的是,看起来 HK2(由 Jersey 2 使用)正在尝试执行注入(inject)。

(我有一个 org.glassfish.hk2.api.UnsatisfiedDependencyException 当命中 REST 端点时)。

如何正确设置 WELD(最好以编程方式)?

最佳答案

我使用了 Weld SE:

import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;

然后简单地

Weld weld = new Weld();
try {
WeldContainer container = weld.initialize();

URI baseUri = UriBuilder.fromUri("http://localhost/").port(8080).build();
ResourceConfig config = ResourceConfig.forApplicationClass(MyApplication.class);

Server server = JettyHttpContainerFactory.createServer(baseUri, config);

server.join();

} catch (Exception e) {
e.printStackTrace();
} finally {
weld.shutdown();
}

请注意,HK2 将处理 REST 类,因此我必须编写一个 Binder 来使注入(inject)在这些类中起作用。 This question helped me a lot .

关于java - Jetty Embedded, Jersey 2, Weld ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20999320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com