2012-03-19 3 views
0

Guice를 처음 사용합니다. DI 용 RESTful 웹 서비스와 Guice를 사용하여 서버 애플리케이션을 만들고 싶습니다. 나는 튜토리얼 here을 따라 갔는데, 나는 덤불 대신 Tomcat6을 사용한다. 그러나 나는 그것을 실행 :(com.sun.jersey.guice.spi.container.servlet.GuiceContainer에서 적절한 생성자를 찾을 수 없습니다.

난 항상 응용 프로그램 시작시 com.sun.jersey.guice.spi.container.servlet.GuiceContainer에 적절한 생성자를 찾을 수 없습니다 얻을.

얻을 수 없다 컨텍스트 초기화 된 이벤트를 de.server.MyGuiceServletConfig 클래스의 리스너 인스턴스에 보내는 중 예외 com.google.inject.CreationException : Guice 만들기 오류 : 1) com.sun.jersey.guice.spi.container에서 적절한 생성자를 찾을 수 없습니다. servlet.GuiceContainer. 클래스는 @Inject로 주석 된 하나의 생성자 (또는 유일한 생성자) 또는 private이 아닌 인수가없는 생성자 중 하나를 가져야합니다. com.sun.jersey.guice.JerseyServletModule.webApp에서 com.sun.jersey.guice.spi.container.servlet.GuiceContainer.class (GuiceContainer.java:108) 에서 (JerseyServletModule.java:90)

GuiceContainer 클래스에는 Injector가 필요한 @Inject 문을 사용하는 생성자가 있습니다.

@Inject 
public GuiceContainer(Injector injector) { 
    this.injector = injector; 
} 

내 web.xml 파일은 다음과 같습니다

public class MyGuiceServletConfig extends GuiceServletContextListener { 

public MyGuiceServletConfig() { 

} 

public class MyJerseyServletModule extends JerseyServletModule { 
    @Override 
    protected void configureServlets() { 
     // Must configure at least one JAX-RS resource or the 
     // server will fail to start. 
     bind(ITest.class).to(Test2.class); 
     bind(TestRestService.class); 

     serve("/*").with(GuiceContainer.class); 
    } 
} 

@Override 
protected Injector getInjector() { 
    return Guice.createInjector(new MyJerseyServletModule()); 
}} 

그리고 마지막으로 나머지 서비스 :

<web-app id="WebApp_ID" version="2.4" 
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
<display-name>Restful Web Application</display-name> 
<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>/*</url-pattern> 
</filter-mapping> 

<listener> 
    <listener-class>de.server.MyGuiceServletConfig</listener-class> 
</listener> 

<context-param> 
    <param-name>resteasy.scan</param-name> 
    <param-value>true</param-value> 
</context-param> 

<context-param> 
    <param-name>resteasy.servlet.mapping.prefix</param-name> 
    <param-value>/rest</param-value> 
</context-param> 

<listener> 
    <listener-class> 
     org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap 
    </listener-class> 
</listener> 

<servlet> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <servlet-class> 
     org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher 
    </servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

내 설정 클래스는 다음과 같습니다

@Path("/test") 
public class TestRestService { 

private ITest test; 

@Inject 
public TestRestService(ITest t){ 
    this.test = t; 
} 

@GET 
@Path("/getMe") 
public String getMe() { 
    return test.getName(); 
} 


@GET 
@Path("/getAll") 
public Response getAll() { 
    return Response.status(200).entity("sadsads").build(); 
}} 

제가 누락 된 부분을 모르겠습니다. 내가 잘못한 것을 말해 줄 수 있기를 바랍니다.

추가 정보가 필요하면 의견을 남기고 추가하겠습니다. 사전에

들으,

답변

0

확인 TJ, 내가 문제를 발견했다.

그것은 조금 이상하게 들리 겠지만, 문제는이다 (나는 그것이 문제가 발생 빌드 과정이 될 수 있다고 제안 결코 원인 내가, 내 질문에 언급하지 않았다) 다음 : 나는 정의

내 품 안에있는 최종 이름 :

<build> 
<finalName>mytest</finalName> 

이것은 정확히 문제입니다. 이 줄을 제거하면 모든 것이 완벽하게 작동합니다 ...

전쟁을 구축 할 때 최종 이름을 입력하는 것이 왜 어려운지 누군가가 알 수 있습니까?

+1

나는 최근에 같은 문제에 부딪혔다. 솔루션은 실제로 finalName을 변경 한 후 mvn을 정리 한 것이라고 생각합니다. 내 구성을보고 약 3 시간 후에 mvn 클린 패키지로이 문제를 해결했습니다. 나는 mvn war를 실행했다 : 내 pom에 종속성을 추가 한 후 내 의존성을 복사하는 전쟁.이 서버가 성공적으로 시작했지만 "mvn 깨끗한 패키지"로만 해결할 수있는 다른 문제가 있다고 생각합니다. –

관련 문제