我使用tomcat 9.0.4和Java1.8。在同一个项目中,泽西提供了一个网络服务。我可以从webservice类中使用@Inject,没有任何问题。我试图让注入工作从我的websocket端点显示在下面。
@ApplicationScoped
@ServerEndpoint("/endpoint")
public class ArchApi {
@Inject RepClass injectedClass;
@OnMessage()
public String onMessage(byte[] data) {
injectedClass.doThings("test");
}
}这是我的CDI实现:
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.27</version>
</dependency>我得到的只有一个java.lang.NullPointerException。
我找到了这个功能请求。因此,我认为在tomcat中还没有实现注入。
我的问题:
目前,我正在考虑迁移到glassfish,它应该支持从Server端点注入
发布于 2018-07-04 14:47:41
您可以使用以下配置器来使CDI管理端点类:
public class CdiAwareConfigurator extends ServerEndpointConfig.Configurator {
public <T> T getEndpointInstance(Class<T> endpointClass) throws InstantiationException {
return CDI.current().select(endpointClass).get();
}
}然后按以下方式注释端点类:
@ServerEndpoint(value = "/chat", configurator = CdiAwareConfigurator.class)
public class ChatEndpoint {
...
}根据您的CDI配置,您可能需要用@Dependent对端点类进行注释。
或者,您可以使用以下方法以编程方式查找bean实例:
SomeSortOfBean bean = CDI.current().select(SomeSortOfBean.class).get();https://stackoverflow.com/questions/51175990
复制相似问题