如何检查JBoss部署者是否正常工作

时间:2012-08-18 23:41:59

标签: rest jboss seam resteasy jboss6.x

我正试图在JBoss AS6 Final(SEAM 2应用程序)上工作,但我似乎无法获得最基本的示例,据我所知,resteasy应该准备好了,我尝试了以下示例来自here,但网址只会导致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没有完成它的工作,但我不确定如何调试它

任何帮助都会很棒我把头发拉过这个!!

2 个答案:

答案 0 :(得分:1)

必须配置RESTEasy才能作为服务公开。您可以直接或通过Seam的资源servlet来完成。

要直接使用RESTEasy,我发现最简单的方法是将其配置为Servlet过滤器。除了web.xml中记录的<resteasy:application resource-path-prefix="/rest" /> 添加过滤器之外别无其他。

使用Seam时,这是不必要的,因为Seam能够非常简单地通过其资源servlet部署RESTEasy服务(在http://docs.jboss.org/resteasy/docs/2.3.0.GA/userguide/html/Installation_Configuration.html#filter中有记录)。您首先声明RESTEasy的应用程序组件,如下所示:

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

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

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

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

jboss-seam-resteasy.jar

采用Seam方式的优势主要是易于使用。您需要包含一个额外的jar:{{1}}。

答案 1 :(得分:0)

您似乎误解了javax.ws.rs.Application的角色。您的Library课程不必延长javax.ws.rs.Application以展示getBooks() - 方法。

创建一个扩展javax.ws.rs.Application的类。重写getSingletons() - 方法并返回一组包含您希望公开的方法的实例:

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

web.xml中,更改javax.ws.rs.Application init-param,使其指向MyApplication类。