我正试图在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没有完成它的工作,但我不确定如何调试它
任何帮助都会很棒我把头发拉过这个!!
答案 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
类。