我在Stackoverflow上遇到了一些与此相关的问题,并以相同的方式实现了我的代码,但是当我从Restful Services中使用@EJB注释时,对我来说仍然不起作用。 1. EJB injection into Restful service (NullPointerException) 2. Cant inject Bean class into Restfull WebService (JAX-RS)
我正在使用Websphere应用程序服务器来部署EAR,并从一个简单的主类中调用rest服务。 在下面的代码中,我期望myService进行初始化,但会引发NullPointerException。
下面是我的示例资源类:
@Path(value = "/addresses")
@Stateless(name = "MyFacade")
public class MyFacade implements IMyFacade {
@EJB
private IMyService myService;
@Override
@POST
@Path("/postReq")
@Consumes("application/json")
public Response myMethod(RequestDTO requestDTO) {
Long docId = myService.generate(requestDTO);
return Response.status(201).entity(docId).build();
}
}
接口:
@Local
public interface IMyFacade {
public Response myMethod(RequestDTO requestDTO);
}
应用程序扩展名:
public class UtilitiesApplication extends Application {
@Override
public Set<Class< ? >> getClasses() {
Set<Class< ? >> classes = new HashSet<Class< ? >>();
classes.add(MyFacade.class);
return classes;
}
}
服务等级:
@Stateless
public class MyService implements IMyService {
//Implementation of generate() method.
}
Web.xml条目
<servlet>
<description>
JAX-RS Tools Generated - Do not modify</description>
<servlet-name>my.facades.MyFacade</servlet-name>
<servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>my.facades.UtilitiesApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>my.facades.MyFacade</servlet-name>
<url-pattern>/MyWS/*</url-pattern>
</servlet-mapping>
请帮助我了解我可能做错了什么。让我知道是否需要其他信息。 谢谢!