Не удалось найти подходящий конструктор в com.sun.jersey.guice.spi.container.servlet.GuiceContainer - PullRequest
0 голосов
/ 20 марта 2012

Я новичок в Guice.Я хочу создать серверное приложение с веб-сервисами RESTful и Guice for DI.Я следовал учебному пособию здесь , вместо пристани я использую Tomcat6.Но я не могу запустить его: (

Я всегда получаю Не могу найти подходящий конструктор в 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, либо конструктор с нулевым аргументом, который не является закрытым.на com.sun.jersey.guice.spi.container.servlet.GuiceContainer.class (GuiceContainer.java:108) на com.sun.jersey.guice.JerseyServletModule.webApp (JerseyServletModule.java:90)

У класса GuiceContainer есть конструктор с оператором @Inject, в котором он нуждается в Injector.

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

Мой web.xml выглядит следующим образом:

<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> 

Мой конфиг-класс выглядит так:

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());
}}

И последний, но не менее важный сервис:

@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();
}}

Я не знаю, что мне не хватает.Надеюсь, вы скажете мне, что я сделал не так ...

Если вам нужна дополнительная информация, просто оставьте комментарий, и я добавлю его.

Спасибо заранее, TJ

1 Ответ

0 голосов
/ 20 марта 2012

Хорошо, я нашел проблему.

Звучит немного странно, но проблема в следующем (я не упомянул об этом в своем вопросе, потому что никогда не предполагал, что это может быть процесс сборки, вызывающий проблемы):

Я определил окончательное имя в моём пом:

<build>
<finalName>mytest</finalName>

И это именно проблема. Когда я удаляю эту строку, все работает идеально ...

Может кто-нибудь сказать мне, почему это сложно ввести окончательное имя при строительстве войны?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...