2013-04-26 3 views
1

나는 이것을 수행하는 방법에 대한 안내서로이 링크를 언급했다. https://jersey.java.net/nonav/apidocs/latest/jersey/contribs/jersey-guice/com/sun/jersey/guice/spi/container/servlet/package-summary.html저지가 라이프 사이클을 인스턴스화하고 관리하고 Guice가 주입을 수행하게하는 방법

나는 거기에 나타난 것을 따라 갔다. web.xml에
:

<listener> 
    <listener-class>com.oocl.ir4.doc.common.servlet.GuiceServletConfig</listener-class> 
</listener> 
<filter> 
    <filter-name>GuiceFilter</filter-name> 
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>GuiceFilter</filter-name> 
    <url-pattern>/rest/*</url-pattern> 
</filter-mapping> 

내 guice의 설정 : 실제로 내가 원하지 않는 이미 뉴저지에 의해 관리되는 자원 클래스 아래

public class GuiceServletConfig extends GuiceServletContextListener { 

    @Override 
    protected Injector getInjector() { 
    return Guice.createInjector(new JerseyServletModule() { 

     @Override 
     protected void configureServlets() { 

     Map<String, String> params = new HashMap<String, String>(); 
     params.put(PackagesResourceConfig.PROPERTY_PACKAGES, "xxx.yyy"); 
     serve("/rest/*").with(GuiceContainer.class, params); 
     } 
    }); 
    } 
} 

은 Guice에 의해 관리된다. 그 패키지는 Guice 구성에 뉴저지에서 스캔하지만, 언 바운드입니다 : 내가 Guice는 자원을 투입 할

package xxx.zzz; 

@Path("/xxx/zzz") 
public class AbcResource extends Resource { 

@Inject 
    private AbcServiceImpl abcService; 

... 
} 

클래스는 :

package xxx.yyy; 

@Singleton 
public class AbcServiceImpl { 
... 
} 

그러나, 그것은 작동하지 않습니다. NullPointerException은 AbcResource의 abcServiceImpl에 액세스 할 때 발생합니다.

누구나 Guice 컨테이너에서 유지 관리되는 항목을 확인하는 이유 또는 확인 방법에 대한 힌트가 있습니까?

답변

0

Guice가 AbcResource에 회원을 추가하게하려면 Guice가 그 클래스를 관리해야합니다. 난 당신이 추가 할 필요 해요 의심 :

bind(AbcResource.class); 

당신의 ConfigureServlets 방법에 관한 것이다. Jersey가 수행하는 오브젝트 관리를 방해하지 않습니다.

+0

감사합니다. @condit. 시도했지만 여전히 작동하지 않는 것 같습니다. 나는 그것에 대해 더 조사 할 필요가 있다고 생각한다. –