4
考慮以下服務:EJB JAX-RS @Context HttpServletRequest NullPointerException - 爲什麼?
@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
注入?在JAX-RS可以做任何事情之前,EJB是否通過創建實例並填充代理對象來防止這種情況發生?