我正在使用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注入。显然WELD没有启动(CDI支持未启用),而且更奇怪的是,它看起来像HK2(泽西2使用)正在尝试执行注入。
(点击REST端点时我有org.glassfish.hk2.api.UnsatisfiedDependencyException
。)
如何正确设置WELD(最好以编程方式)?
答案 0 :(得分:3)
我使用了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来使注入在这些类中工作。 This question helped me a lot