次のサービスを検討してください。
@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 が何かを行う前にプロキシ オブジェクトを埋めることによって、これを防ぎますか?