4

次のサービスを検討してください。

@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 が何かを行う前にプロキシ オブジェクトを埋めることによって、これを防ぎますか?

4

1 に答える 1