3

そこで、WebSphere 8.5 インスタンスで動作する JAX-RS アプリケーションを取得しようとしています。次のインターフェースを作成しました...

@Path("service")
public class RestService {

    @GET
    @Produces("text/plain")
    public int getCount(){
        return 1;
    }
}

そして、これは私のアプリケーションです...

public class RESTConfig extends Application{
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new Hashset<?>();
        classes.add(RestService.class);
        return classes;
    }
}

そして、これは私のweb.xmlです...

<servlet>
    <servlet-name>Rest Servlet</servlet-name>
    <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
    <init-param>
    <param-name>jaxrs.ws.rs.Application</param-name>
        <param-value>com.company.rest.RESTConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
....
<servlet-mapping>
    <servlet-name>Rest Servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>

次に、WAR をモジュールとして構成した EAR を作成します。しかし、すべてを開始して http://localhost:[port]/war/rest/app/service にアクセスしようとすると、わかります..

[TIME] 00000115 RequestProces I org.apache.wink.server.internal.RequestProcessor logException ハンドラー チェーンの呼び出し中に次のエラーが発生しました: http に送信された GET 要求の処理中にメッセージ「null」を伴う WebApplicationException (404 - 見つかりません): //localhost:[ポート]/war/rest/service

助けてください!

4

4 に答える 4

3

WAS8.5 は v2.4 および v3 サーブレットをサポートします。web.xml コンテンツの削除 (および 3.0 コードの使用) がうまくいった理由は、web.xml の param-name タグに誤りがあったためです。正しいパラメーター名を使用すると、v2.4 サーブレットは WAS8.5 で正常に動作します。

これは正しくありません。

<param-name>jaxrs.ws.rs.Application</param-name>

正解です:

<param-name>javax.ws.rs.Application</param-name>

詳細: http://pic.dhe.ibm.com/infocenter/wasinfo/v8r5/topic/com.ibm.websphere.nd.multiplatform.doc/ae/twbs_jaxrs_configwebxml.html

于 2013-07-23T15:46:59.013 に答える
1

この問題は、v3サーブレットのみをサポートする8.5に関連しているようです。これで問題が解決したようです。

@Path("service")
public class RestService {

    @GET
    @Produces("text/plain")
    public String getCount(){
        //Text-Plain cannot be int apparently
        return String.valueOf(1);
    }
}

@ApplicationPath("rest")
public class RESTConfig extends Application{
   //Override no longer needed.
}

これで正常にデプロイされるはずです...

これが私のソースIBMでした

于 2012-12-14T17:54:33.107 に答える
1

クラス( RestConfigJAX-RS アプリケーションとして定義されている) をオーバーライドgetClassesして、リソースを返す必要があります。

@Path("app")
public class RESTConfig extends Application{
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new Hashset<?>();
        classes.add(RestService.class);

        return classes;
    }
}
于 2012-12-14T09:41:51.603 に答える