【问题标题】:RestEasy not working in JBoss 7.2RestEasy 在 JBoss 7.2 中不工作
【发布时间】:2014-02-05 05:00:49
【问题描述】:

我正在使用 JBoss 7.2,我的应用程序中有一个空的 web.xml:

<?xml version="1.0"?>
<web-app 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">
</web-app>

我使用了依赖:

         <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>3.0.6.Final</version>
            <scope>provided</scope>
        </dependency>

简单的应用:

@ApplicationPath("/rest")
public class JaxRsActivator extends Application {
}

@Path("/v1")
public class RestfulService {

    @POST
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/test")
    public String testAPI() {
        JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
        jsonObject.put("status", "Success");
        return jsonObject.toString();
    }
}

但我在尝试localhost:8080/testapplication/rest/v1/test 时得到HTTP 404。我有什么遗漏吗?

更新:

我把web.xml改成了:

<web-app version="3.0" 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">
         <servlet>
        <servlet-name>Resteasy</servlet-name>
        <servlet-class>
            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
        </servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.technology.apiinterface.restful.service.JaxRsActivator</param-value>
        </init-param>
    </servlet>

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

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

并更改了 JaxRsActivator 类:

public class JaxRsActivator extends Application {
    private Set<Object> singletons = new HashSet<Object>();
    private Set<Class<?>> classes = new HashSet<Class<?>>();

    public JaxRsActivator() {
        singletons.add(new RestfulService());
    }

    @Override
    public Set<Class<?>> getClasses() {
        return classes;
    }

    @Override
    public Set<Object> getSingletons() {
        return singletons;
    }
}

现在尝试localhost:8080/testapplication/rest/v1/test 时,我得到以下异常:

Allocate exception for servlet Resteasy: java.lang.ClassCastException: com.technology.apiinterface.restful.service.JaxRsActivator cannot be cast to javax.ws.rs.core.Application
        at org.jboss.resteasy.spi.ResteasyDeployment.createApplication(ResteasyDeployment.java:295) [resteasy-jaxrs-3.0.6.Final.jar:]
        at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:236) [resteasy-jaxrs-3.0.6.Final.jar:]
        at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.init(ServletContainerDispatcher.java:112) [resteasy-jaxrs-3.0.6.Final.jar:]
        at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.init(HttpServletDispatcher.java:36) [resteasy-jaxrs-3.0.6.Final.jar:]
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1194) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
        at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:950) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:151) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
        at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) [jboss-as-web-7.2.0.Final-redhat-4.jar:7.2.0.Final-redhat-4]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]

【问题讨论】:

  • 第一个假设:这并不神秘。看起来您扩展了错误的 Application 类。
  • import javax.ws.rs.core.Application; 不会是导入错误吧?
  • 嗯实际上没有错。检查我自己的设置,我没有 servlet,我只是用 @ApplicationPath("/REST") 注释应用程序类,这是 JBoss 实际初始化 JAX-RS 子系统的触发器。
  • 我什至尝试使用空的web.xml@ApplicationPath("/rest"),但是在部署时我得到No Servlet mappings found for JAX-RS application: com.technology.apiinterface.restful.service.JaxRsActivator either annotate it with @ApplicationPath or add a servlet-mapping in web.xml
  • 是的,所以设置有问题。唉,根据您在这里提供的内容,我不能说什么。注释方式是正确的,“在我的机器上工作”并且我也运行我自己的 JBoss 7.2 版本,尽管我将 RestEasy 升级到最新版本以摆脱过时的 Jackson 库的问题。您确定您的应用程序中没有部署 RestEasy / JAX-RS jar 吗?

标签: java jax-rs jboss7.x resteasy


【解决方案1】:

如果您的 javax.ws.rs.core.Application 子类没有使用 @ApplicationPath 注释,您可以尝试在您的 web.xml 中使用类似的内容吗?

<web-app version="3.0" 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">

  <servlet-mapping>
    <servlet-name>com.technology.apiinterface.restful.service.JaxRsActivator</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

如果您愿意,您应该能够摆脱这个 JaxRsActivator 类并使用类似的东西(RESTEasy 应该发现所有 JAX-RS 资源和子资源、提供程序等):

<web-app version="3.0" 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">

  <servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多