EJB注释不适用于Restful Services

时间:2019-01-02 16:59:47

标签: java rest ejb-3.0 ejb-3.1 websphere-8

我在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>

请帮助我了解我可能做错了什么。让我知道是否需要其他信息。 谢谢!

0 个答案:

没有答案