我正在尝试使用内置的Restful WebServices和JBoss AS 7.我的web.xml是..
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_2_5.xsd"
version="2.5">
</web-app>
我的申请类是......
package com.robert;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;
@ApplicationPath("/services")
public class HelloWorld extends Application {
private Set<Object> singletons = new HashSet<Object>();
public HelloWorld() {
singletons.add(new Library());
}
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(Library.class);
return classes; //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public Set<Object> getSingletons() {
return singletons;
}
}
我的班级是
import javax.ws.rs.*;
@Path("/library")
public class Library {
@GET
@Path("/books")
public String getBooks() {
return "this is all your books";
}
@GET
@Path("/book/{isbn}")
public String getBook(@PathParam("isbn") String id) {
// search my database and get a string representation and return it
return "Its a good book; I read it";
}
@PUT
@Path("/book/{isbn}")
public void addBook(@PathParam("isbn") String id, @QueryParam("name") String name) {
System.out.println("Adding book "+name);
}
@DELETE
@Path("/book/{id}")
public void removeBook(@PathParam("id") String id ){
System.out.println("Removing book "+id);
}
}
但是,当我启动JBoss AS7时,WebService永远不会启动。我没有在JBoss Management页面中看到它,我在
看不到它http://foobar:8080/MyWar/services/library/books
答案 0 :(得分:3)
好的,我发现了这个问题。按照RestEasy的指示,我已经将最新版本的RestEasy安装到JBoss模块中。当我恢复到默认安装时,它工作。请注意,web.xml 绝不能包含对Restful servlet的任何引用,因为当JBoss部署者在类上看到@ApplicationPath注释时会自动部署RestEasy。 Web.xml应为空。
答案 1 :(得分:1)
您需要添加REST servlet映射
您需要将一个servlet映射添加到REST Servlet,类似这样
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
其中URL模式应匹配应该作为RESTFUL处理的任何内容(或使用/ * - 这将使您的Rest servlet处理对此应用程序的所有请求)
我不知道为什么但是我从未见过我在JBoss管理控制台上的Web服务部分中的任何 Restful Web服务,但我看到了基于WSDL SOAP的Web该清单中的服务。
但是,我确实在管理控制台的管理部署部分看到了Restful项目
答案 2 :(得分:0)
修复您的应用:
<web-app version="3.0" ..
2.3.2 Servlet
部分,这将帮助您设置web.xml
的其余部分,尽管在您的示例中它是多余的。此外,您可以使用helloworld-rs快速入门随附jbossas-7作为JavaEE 6 RESTful webapp的起点。