【问题标题】:resteasy + tomcat servlet container 3.0 + guice not workingresteasy + tomcat servlet container 3.0 + guice 不工作
【发布时间】:2016-12-09 05:32:25
【问题描述】:

我正在尝试让 resteasy 3.0.19、guice 4.0 和 tomcat 7.0.73 一起工作,并且我正在尝试获得除 404 响应之外的其他内容。为了排除故障,我只是尝试让 guice-hello 示例工作,稍作修改。在启动时,我看到HelloModuleHelloResource 被拾取并注册。

23:09:29.875 [RMI TCP Connection(3)-127.0.0.1] INFO org.jboss.resteasy.plugins.guice.i18n - RESTEASY011005: found module: org.jboss.resteasy.examples.guice.hello.HelloModule
23:09:30.169 [RMI TCP Connection(3)-127.0.0.1] INFO org.jboss.resteasy.plugins.guice.i18n - RESTEASY011020: registering factory for org.jboss.resteasy.examples.guice.hello.HelloResource
[2016-12-08 11:09:30,250] Artifact Gradle : abbvie.ir.pikm : people.service.war (exploded): Artifact is deployed successfully
[2016-12-08 11:09:30,250] Artifact Gradle : abbvie.ir.pikm : people.service.war (exploded): Deploy took 3,172 milliseconds

但是,当我尝试访问 http://localhost:8080/people.service/hello/test 时,我从 tomcat 得到一个 404 页面。还有一件事需要注意,如果我访问http://localhost:8080/garbage,我也会得到一个 404 状态,但我没有得到一个 404 状态页面,只是一个空白页面。

由于这是一个 3.0 servlet 容器,我没有在我的 web.xml 中定义任何调度程序 servlet。它看起来像:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0" metadata-complete="true">

    <display-name>People Service</display-name>

    <context-param>
        <param-name>resteasy.guice.modules</param-name>
        <param-value>
            org.jboss.resteasy.examples.guice.hello.HelloModule
        </param-value>
    </context-param>

    <listener>
        <listener-class>
            org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener
        </listener-class>
    </listener>

</web-app>

所有其他类只是 guice-hello 示例中的默认类,即 HelloModule、HelloResource、Greeter 和 DefaultGreeter。在我看来,默认调度程序没有按照定义处理请求。有任何解决此问题的想法吗?

【问题讨论】:

    标签: tomcat7 guice resteasy


    【解决方案1】:

    通过resteasy代码,我发现问题是在用于servlet 3.0容器的ResteastServletInitializer中,如果没有定义Application类,那么它会跳过HttpServlet30Dispatcher的配置。有一个handleNoApplicationClass 方法,但此时它似乎不完整。

    解决方案是定义以下类:

    package abbvie.ir.pikm.people.service;
    
    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;
    
    @ApplicationPath("/api")
    public class PeopleServiceApplication extends Application {
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-24
      • 1970-01-01
      • 2018-09-20
      • 2012-02-09
      • 1970-01-01
      • 2012-07-25
      • 2013-11-21
      • 2015-03-23
      • 2016-06-19
      相关资源
      最近更新 更多