簡體   English   中英

在com.sun.jersey.guice.spi.container.servlet.GuiceContainer中找不到合適的構造函數

[英]Could not find a suitable constructor in com.sun.jersey.guice.spi.container.servlet.GuiceContainer

我是Guice的新手。 我想使用RESTful Web服務和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.JerseyServletModule.webApp(JerseyServletModule.java:90)上的com.sun.jersey.guice.spi.container.servlet.GuiceContainer.class(GuiceContainer.java:108)

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

我不知道我在想什么。 希望你能告訴我我做錯了什么...

如果您需要更多信息,請發表評論,我會添加。

提前Thx,TJ

好的,我發現了問題。

聽起來有些怪異,但是問題出在下面(我沒有在問題中提到它,因為我從未暗示過可能是導致問題的構建過程):

我在pom中定義了一個姓氏:

<build>
<finalName>mytest</finalName>

而這正是問題所在。 當我刪除此行時,一切正常。

有人可以告訴我為什么在打仗時輸入姓氏會帶來問題嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM