1

我使用 eclipse + glassfish 从 eclipse 部署了我的第一个 Web 服务。我有以下课程:

package com.restfully.shop.services;

import javax.ws.rs.core.*;
import java.util.*;

public class ShoppingApplication extends Application {

    private Set<Object> singletons = new HashSet<Object>();
    private Set<Class<?>> empty = new HashSet<Class<?>>();

    public ShoppingApplication() {
        singletons.add(new CustomerResource());
    }

    @Override
    public Set<Class<?>> getClasses() {
        return empty;
    }

    @Override
    public Set<Object> getSingletons() {
        return singletons;
    }


}

和以下 web.xml:

<?xml version="1.0" ?>
<web-app>
 <servlet>
        <servlet-name>Rest</servlet-name>
        <servlet-class>com.restfully.shop.services.ShoppingApplication</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Rest</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

只要我读到 glassfish 已经包含球衣 - id 没有将任何内容放入 web 项目的 lib 文件夹中。

但是当我在浏览器中启动应用程序时:

Exception

javax.servlet.ServletException: PWC1403: Class com.restfully.shop.services.ShoppingApplication is not a Servlet
root cause

java.lang.ClassCastException: com.restfully.shop.services.ShoppingApplication cannot be cast to javax.servlet.Servlet

glassfish 版本是 3.1.1

我还编写了一个简单的客户端,它通过 java.io.URL 连接到服务,但是那个客户端返回:

404
Location:null

服务有什么问题,我该如何解决?+ 将不胜感激 - 服务如何测试???是否总是这样 - 编写一个使用这些 URL 连接的测试类,或者是否有任何标准方法来测试 Web 服务?

4

2 回答 2

2

我猜你的课扩展了javax.ws.rs.core.Application。此外,它应该用 注释@javax.ws.rs.ApplicationPath("your_rest_path")

使用此注释,您不需要servlet. web.xmlGlassFish 将能够自动拾取它。

您还必须将所有 JAX-RS 资源类添加到Set返回的getClasses().

于 2012-11-09T07:38:16.033 回答
1

我没有使用 Glassfish 的经验,但 v3 似乎支持 JAX-RS。

这意味着不需要 javax.ws.rs.core.Application 的子类。

只需使用 web.xml 部署您的 JAX-RS 注释类,如下所示

<servlet>  
    <servlet-name>ServletAdaptor</servlet-name>  
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>  
    <load-on-startup>1</load-on-startup>  
</servlet>  

<servlet-mapping>  
    <servlet-name>ServletAdaptor</servlet-name>  
    <url-pattern>/resources/*</url-pattern>  
</servlet-mapping>

随后可以通过将 /resources/ 添加到上下文根来访问您的 REST 应用程序。

于 2012-11-09T07:53:16.193 回答