我已将CDI功能添加到 server.xml 文件<feature>cdi-1.2</feature>
。
我的maven模块在<module_name>/src/main/resources/META-INF
文件夹中包含 beans.xml 。
这是beans.xml的内容:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">
</beans>
但是当我使用@Inject
注释不起作用时,我的bean始终是null
。
代码:
package ch.webapp.presentation;
...
@Path("/test/")
public class MyController {
@Inject
private MyService myService;
@GET
@Path("/foo/{count}")
@OAuthSecurity(scope = "login")
@Produces("application/json")
public Response news(@PathParam("count") int count) {
return Response
.ok(myService.getBar(count))
.build();
}
}
编辑:
那是我的豆子
package ch.webapp.service;
...
@RequestScoped
public class MyService {
public String getBar(int count) {
return "foo";
}
}
我通过扩展MFPJAXRSApplication
类来初始化jax-rs
package ch.webapp;
...
public class AccountApplication extends MFPJAXRSApplication {
@Override
protected void init() throws Exception {
}
@Override
protected void destroy() throws Exception {
}
@Override
protected String getPackageToScan() {
return getClass().getPackage().getName();
}
}
环境详细信息:
Launching mfp (WebSphere Application Server 8.5.5.8/wlp-1.0.11.cl50820151201-1942) on Java HotSpot(TM) 64-Bit Server VM, version 1.8.0_172-b11 (en_CH)
Console Product version: 8.0.0.00-20180717-175523
怎么了?
答案 0 :(得分:1)
首先,除非您进行适当的注释,否则似乎Websphere jax-rs实现不会自动集成jax-rs资源。
通过适当地注释jax-rs到CDI管理的上下文中
my_list = []
my_list.append(list_element)
还请确保用于您的服务的注释是
@Path("/test/")
@javax.enterprise.context.RequestScoped
public class MyController {
@Inject
private MyService myService;
@GET
@Path("/foo/{count}")
@OAuthSecurity(scope = "login")
@Produces("application/json")
public Response news(@PathParam("count") int count) {
return Response
.ok(myService.getBar(count))
.build();
}
}
答案 1 :(得分:0)
根据您提供的输入,请仔细阅读以下清单。
beans.xml
放在此路径src/main/resources/WEB-INF/beans.xml
中。 (如果这是Java EE 7应用程序,那么beans.xml是可选的。在您的AccountApplication类中,尝试将包名称硬编码为ch.webapp.presentation
@Override 受保护的字符串getPackageToScan(){ 返回“ ch.webapp.presentation”; }
这仅是为了检查MFPJAXRSApplication.getPackageToScan()方法的行为,是仅扫描指定的程序包还是其子程序包。
答案 2 :(得分:-2)
这是经典错误。 CDI适用于托管 Bean(例如EJB和Servlet)。如果要在JAXRS Bean上启用它,则必须将其设置为“托管”,即将MyController注释为(例如)javax.annotation.ManagedBean
或javax.ejb.Stateless
。
还要注意,对于webapp(.war),beans.xml文件必须位于WEB-INF文件夹中!