考虑以下服务:
@Path("/")
@Stateless
public class SomethingService {
@Context
final HttpServletRequest request
@POST
@Path("post/something/")
@Produces("application/json; charset=UTF-8")
public String addSomething(@FormParam("something") final String something) {
// access to request methods results in NullPointerException
}
}
我NullPointerException
在方法执行时得到一个,尽管从调试的角度来看,我注意到request
这并不是真正null
的,而是org.apache.openejb.rest.ThreadLocalHttpServletRequest
. 当我将@Context
注入移动到方法参数级别时,一切正常:
public String addSomething(@FormParam("something") final String something,
@Context final HttpServletRequest request) { ... }
这是什么原因?据我记得,在我将服务设为 EJB 之前它曾经工作过(我这样做是为了使用@EJB
或@Inject
可能注入 DAO)。JAX-RS 是否为每个请求创建此类服务的实例,从而能够通过类级别注入@Context
?EJB 是否通过在 JAX-RS 可以做任何事情之前创建实例并填充代理对象来防止这种情况?