【问题标题】:RestEasy Jax-RS in Jboss 7.1 doesn't workJboss 7.1 中的 RestEasy Jax-RS 不起作用
【发布时间】:2013-04-19 21:24:05
【问题描述】:

我正在尝试在 JBoss AS 7.1 下部署一个简单的 Web 应用程序,该应用程序与 resteasy 捆绑在一起。根据文档,所有需要的是(至少)是一个空的web.xml,一个带有注释的类@ApplicationPath("/mypath")@Path("/other_stuff") 用于其他类

我正在关注的文档在这里:

不过,当我击中时:

host:8080/warname/applicationpath/path

我在网页上收到 404 错误,但日志中没有任何内容。

为了让 JAX-RS 工作,我需要更改配置文件吗?

提前感谢您的帮助!

【问题讨论】:

  • 我的 webapp 中已经有了 acdcjunior 建议的解决方案,但 Jboss 似乎没有注册 ApplicationPath 或 Path。启动时,我的日志中没有看到任何与 JAX-RS 或 Rest 相关的内容。

标签: rest jakarta-ee web-applications jboss7.x resteasy


【解决方案1】:

空的web.xml 就可以了。

只需在您的类路径中添加一些简单的依赖项即可。例如,如果您使用 maven,您可以将其添加到您的 pom.xml

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
    <version>2.3.1.GA</version>
    <scope>provided</scope> <!-- provided if youre deploying to jboss as 7.1 -->
</dependency>

然后只使用这个类来设置应用程序:

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

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

只是为了确保,添加这样的资源:

@Path("/hello")
public class HelloResource {
    @GET
    @Produces("text/plain")
    public String helloResource() {
        return "Hello! It's "+new Date();
    }
}

这就是你所需要的。将它部署在 JBoss AS 7.1 上并使用它,比如:

http://127.0.0.1:8080/mywarname/rest/hello

编辑:

我创建了一个具有最小结构的 java war maven 项目:

-pom.xml
-src
 |
  --main
    |
     --java
       |
        --rest
          |
           --HelloResource.java
           --JaxRsActivator.java

我称之为simpleRest,如下所示。所有的档案都如图所示:

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                        http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>simpleRest</groupId>
    <artifactId>simpleRest</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>2.3.1.GA</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <!-- So maven doesn't require web.xml -->
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

HelloResource.java

package rest;

import java.util.Date;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/hello")
public class HelloResource {
    @GET
    @Produces("text/plain")
    public String helloResource() {
        return "Hello! It's "+new Date();
    }
}

JaxRsActivator.java:

package rest;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

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

}

这会生成一个simpleRest.war(通过mvn clean package)。然后我将它部署到新安装的JBoss AS 7.1.1.Final。如您所见,部署期间日志中没有提及 JAX-RS:

22:48:08,677 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015876: Starting deployment of "simpleRest.war"
22:48:09,318 INFO  [org.jboss.web] (MSC service thread 1-4) JBAS018210: Registering web context: /simpleRest
22:48:09,492 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS018559: Deployed "simpleRest.war"

之后,URL 按预期可用:

http://127.0.0.1:8080/simpleRest/rest/hello

请注意,其他所有内容都会出现 404 错误。但它是另一种 404。

http://127.0.0.1:8080/simpleRest/ 给出:

HTTP Status 404 - /simpleRest/

这是一个页面未找到错误。另一方面,http://127.0.0.1:8080/simpleRest/rest 给出:

HTTP Status 404 - Could not find resource for relative : / of full path: http://127.0.0.1:8080/simpleRest/rest

这是一个 resource(REST 服务)未找到错误。这样你就知道 JAX-RS 在起作用,尽管它没有那个路径的处理程序。

【讨论】:

  • 感谢您的回复,这正是我所做的,但是当我尝试访问链接时,我被发送到 404 页面。请求没有错误日志,当我启动 Jboss 7.1 时,我没有看到我的休息路径正在注册
  • @user2221005 好的,我来看看可能出了什么问题。
  • @user2221005 我编辑了答案。刚才自己试过了。如您所见,不要指望服务器在部署期间宣布在 war 文件中有 JAX-RS 服务(就像有 WSDL 时那样)。如果此.war 设置对您不起作用,请尝试使用全新的 JBoss(从我指出的链接获取)。在这个新版本中,它必须有效。
  • 我已经在一个单独的项目中完成了这个,它可以工作!我无法将它集成到我当前的项目中,但我相信这是因为我使用的是 BlazeDS。我将为 BlazeDS 和 RestEasy 的集成创建另一篇文章。再次感谢您的所有帮助!
  • 很棒的指导 @acdcjunior,因为你,我终于设法让我自己的 JAX-RS 应用程序通过 IntelliJ 与 Wildfly 一起工作 ;-) 在对网络进行了大量的研究之后......
【解决方案2】:

看看 jboss 快速入门:http://www.jboss.org/jdf/quickstarts/jboss-as-quickstart/ 你可以从http://www.jboss.org/jbossas/downloads获得它们

这些都是开箱即用的。对于 helloword-rs 快速入门,我可以看到带有内容的 web.xml:

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

并且还评论: 激活 REST 服务的方法之一是添加这些行,服务器负责自动添加相应的 servlet。如果 src 文件夹,org.jboss.as.quickstarts.rshelloworld.HelloWorld 类有 Annotations 来接收 REST 调用。

【讨论】:

    【解决方案3】:

    如果您使用 JBoss AS 7.1,您还需要添加“resteasy.resources”上下文参数。您还需要将 init-param 发送到 HttpServletDispatcher servlet。

    我在以下链接找到了解决方案:http://www.javaroots.com/2013/05/creating-rest-services-with-rest-easy.html

    上面链接中只有一个拼写错误(也许!!)。在“RootRestService”中,将 getClasses() 方法的方法签名更改为public Set&lt;Class&lt;?&gt;&gt; getClasses()

    就是这样!它解决了我 3 天的头痛问题。希望对你也有帮助!! :)

    【讨论】:

      【解决方案4】:

      尽管 acdcjunior 的回答很棒而且非常透彻,但我还是想补充一下 Andrzej 的回答。

      它作为一种魅力发挥作用,而且它是迄今为止更直接的一种。 JBoss 快速入门示例(也可在 GitHub 上获得)始终是回答此类问题的绝佳资源。

      【讨论】:

        猜你喜欢
        • 2015-10-17
        • 1970-01-01
        • 2013-11-21
        • 2016-06-27
        • 2014-02-03
        • 2011-11-26
        • 2018-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多