2013-04-06 2 views
4

는 다음과 같은 서비스를 고려하는 방법이 실행될 때 디버깅 관점에서 내가 request 정말 null하지 않았다 눈치 아니라 org.apache.openejb.rest.ThreadLocalHttpServletRequest의 인스턴스 불구하고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를 얻을. 나는 메서드 매개 변수의 수준으로 @Context 주입을 이동하면 모든 것이 잘 작동 :

public String addSomething(@FormParam("something") final String something, 
    @Context final HttpServletRequest request) { ... } 

그 이유는 무엇입니까? 지금까지 내가 서비스를 EJB로 만들기 전에 작업하는 것을 기억했다. (나는 @EJB 또는 @Inject을 사용하여 DAO를 주입 할 수 있었다.) JAX-RS는 모든 요청에 ​​대해 이러한 서비스의 인스턴스를 생성하므로 클래스 레벨 @Context을 통해 주입 할 수 있습니까? JAX-RS가 아무 것도 할 수 없기 전에 EJB가 인스턴스를 생성하고 프록시 객체를 채워서 이것을 막을 수 있습니까?

답변

1

는 오래된 질문 necroing -

당신이 무에이 살이, 그렇게 더 이상 스레드 안전하지 않습니다 필드를 주입, 싱글 모델로 돌았 다. jax-rs 서비스를 Spring 빈으로 변환 할 때도 마찬가지입니다. 이렇게하는 더 안전한 방법은 앞서 언급 한 해결 방법이며 메서드 매개 변수를 주입하는 것입니다.