JBoss AS 7 Restful Webservices不能自动部署

时间:2012-07-10 00:37:58

标签: jboss7.x resteasy

我正在尝试使用内置的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

3 个答案:

答案 0 :(得分:3)

好的,我发现了这个问题。按照RestEasy的指示,我已经将最新版本的RestEasy安装到JBoss模块中。当我恢复到默认安装时,它工作。请注意,web.xml 绝不能包含对Restful servlet的任何引用,因为当JBoss部署者在类上看到@ApplicationPath注释时会自动部署RestEasy。 Web.xml应为空。

答案 1 :(得分:1)

您需要添加REST servlet映射

web.xml 中的

您需要将一个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)

修复您的应用:

  1. 使用<web-app version="3.0" ..
  2. 在@ austin的回答中添加servlet映射
  3. (可选)阅读jax-rs-1.1 specification2.3.2 Servlet部分,这将帮助您设置web.xml的其余部分,尽管在您的示例中它是多余的。
  4. 此外,您可以使用helloworld-rs快速入门随附jbossas-7作为JavaEE 6 RESTful webapp的起点。