首页 > 解决方案 > EJB 注释不适用于 Restful 服务

问题描述

我在 Stackoverflow 上解决了一些与此相关的问题,并以相同的方式实现了我的代码,但是当我从 Restful Services 使用 @EJB 注释时,它仍然对我不起作用。1. EJB 注入 Restful 服务 (NullPointerException) 2.无法将 Bean 类注入 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 条目

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

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

标签: javarestejb-3.0ejb-3.1websphere-8

解决方案


推荐阅读