2

我正在尝试将内置的 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 管理页面中看不到它,在

http://foobar:8080/MyWar/services/library/books
4

3 回答 3

2

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

于 2012-07-20T04:09:34.413 回答
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 项目

于 2012-07-10T07:11:43.780 回答
0

要修复您的应用程序:

  1. 采用<web-app version="3.0" ..
  2. 添加 servlet 映射,如@austin's answer
  3. 或者,阅读2.3.2 Servletjax-rs-1.1规范部分,这将帮助您设置其余部分web.xml,尽管在您的示例中它是多余的。

您也可以使用jbossas-7 随附的helloworld-rs quickstart 作为 JavaEE 6 RESTful webapp 的起点。

于 2012-07-15T11:22:50.120 回答