Я решил несколько вопросов, связанных с этим, в Stackoverflow и реализовал свой код таким же образом, но аннотация @EJB у меня все еще не работает, когда я использую его из Restful Services.1. Внедрение EJB в службу Restful (NullPointerException) 2. Не удается внедрить класс EJB в Restfull WebService (JAX-RS)
Я использую сервер приложений websphere для развертыванияEAR и вызов службы отдыха из простого основного класса.В приведенном ниже коде я ожидаю, что 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 Entry
<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>
Пожалуйста, помогите мне понять, что я могу делать неправильно.Дайте мне знать, нужна ли какая-либо другая информация.Спасибо!