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.xml。GlassFishはそれを自動的に取得できるようになります。

Setまた、によって返されるすべてのJAX-RSリソースクラスを追加する必要があります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 に答える