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();
}}
제가 누락 된 부분을 모르겠습니다. 내가 잘못한 것을 말해 줄 수 있기를 바랍니다.
추가 정보가 필요하면 의견을 남기고 추가하겠습니다. 사전에
들으,
나는 최근에 같은 문제에 부딪혔다. 솔루션은 실제로 finalName을 변경 한 후 mvn을 정리 한 것이라고 생각합니다. 내 구성을보고 약 3 시간 후에 mvn 클린 패키지로이 문제를 해결했습니다. 나는 mvn war를 실행했다 : 내 pom에 종속성을 추가 한 후 내 의존성을 복사하는 전쟁.이 서버가 성공적으로 시작했지만 "mvn 깨끗한 패키지"로만 해결할 수있는 다른 문제가 있다고 생각합니다. –