0

我正在尝试让 resteasy 在 JBoss AS6 Final(SEAM 2 应用程序)上工作,但我似乎无法让最基本的示例正常工作,据我所知,resteasy 应该准备好了,我从这里尝试了以下示例但是url 只会导致 404 错误而没有响应

package uk.co.rest.test;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Application;

public class Library extends Application {

    @GET
    @Path("/books")
    public String getBooks() {
        System.out.println("Check");
        return "done";
    }

}

将以下内容添加到我的 web.xml

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

<servlet>
    <servlet-name>resteasy-servlet</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>uk.co.rest.test.Library</param-value>
    </init-param>
</servlet>

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

我觉得与 JBoss 捆绑的 resteasy.deployer 没有完成它的工作,但我不确定如何调试它

任何帮助都会很棒,我会把我的头发拉到这个上面!!

4

2 回答 2

1

必须配置 RESTEasy 才能作为服务公开。您可以直接执行此操作,也可以通过 Seam 的资源 servlet 执行此操作。

要直接使用 RESTEasy,我发现最简单的方法是将其配置为 Servlet 过滤器。web.xml除了在http://docs.jboss.org/resteasy/docs/2.3.0.GA/userguide/html/Installation_Configuration.html#filter中记录的那样将过滤器添加到您的过滤器之外,几乎没有什么可做的。

然而,当使用 Seam 时,这是不必要的,因为 Seam 能够通过其资源 servlet 非常简单地部署 RESTEasy 服务(记录在http://docs.jboss.org/seam/2.2.0.GA/reference/en-US/html /webservices.html#d0e22093)。您首先像这样声明 RESTEasy 的应用程序组件:

<resteasy:application resource-path-prefix="/rest" />

并创建将自动部署到配置路径中的提供程序,例如:

@Name("libraryService")
@Path("/library")
public class Library implements Serializable {

    @In(create=true) private transient BookHome bookHome;

    @GET @Path("/{book}")
    @Produces("text/plain")
    public String getBooks(@PathParam("book") String id) {
        bookHome.setId(id);
        return bookHome.getInstance().getTitle();
    }
}

然后,您可以通过以下方式访问 RESTEasy 服务:

http://localhost:8080/yourapp/seam/resource/rest/library/1

采用 Seam 方式的优点主要是易于使用。您确实需要包含一个额外的罐子:jboss-seam-resteasy.jar.

于 2012-09-12T23:07:16.617 回答
0

你好像误解了角色的作用javax.ws.rs.Application。您的Library类不必javax.ws.rs.Application为了公开- 方法而扩展getBooks()

创建一个扩展类javax.ws.rs.Application。覆盖getSingletons()-methods 并返回一组具有您希望公开的方法的实例:

public class MyApplication extends javax.ws.rs.Application {
    @Override public Set<Object> getSingletons(){
        return Collections.<Object>singleton(new Library());
    }
}

在您的web.xml中,更改javax.ws.rs.Applicationinit-param,使其指向 MyApplication该类。

于 2012-08-19T17:19:44.523 回答