3
  • ジャージー - 1.16
  • JBoss - 7.1.2 最終版

上記では、リソース クラスをロードできずJBoss、以下のエラーが表示されます。

エラー [[/]] サーブレットが load() 例外をスローしました: javax.servlet.ServletException: リソース構成クラス、biz.bsite.direct.spring.mobile.AddressbookResource はクラス javax.ws.rs.core のスーパー クラスではありません。 com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:741) のアプリケーション com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:678) の com. com.sun.jersey の com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374) のspi.container.servlet.ServletContainer.init(ServletContainer.java:557)

私のリソースクラスは次のようになります。

@Path("アドレス帳") public class AddressbookResource {

Web.xml は次のようになります。

<servlet>
    <servlet-name>JerseyMobile</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>biz.bsite.direct.spring.mobile.AddressbookResource</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

誰かがこれを解決するのを手伝ってくれませんか? パッケージスキャンを使用しようとしましたが、JBoss 7 でも機能しません。

4

1 に答える 1

2

here で説明されているように、アプリサーバーに依存しないJAX-RS展開モデルを使用するのが正しいアプローチだと思います。必要なのは、JAX-RS Web アプリケーションでjavax.ws.rs.core.Applicationを拡張することだけです。ここに例があります。

package com.sun.jersey.samples.helloworld.resources;

import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;

public class MyApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(HelloWorldResource.class);
        return classes;
    }
}

次に、これを web.xml に入れる必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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">
    <servlet>
        <servlet-name>com.sun.jersey.samples.helloworld.resources.MyApplication</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.sun.jersey.samples.helloworld.resources.MyApplication</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.providers</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.resources</param-name>
        <param-value>false</param-value>
    </context-param>
    <servlet-mapping>
        <servlet-name>com.sun.jersey.samples.helloworld.resources.MyApplication</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

JAX-RS アプリケーションとしてデプロイすることに加えて、リソースとプロバイダーの resteasy スキャンを無効にする必要があります。

簡単な Jersey JBoss EAR サンプルを Github hereにまとめました。

于 2013-01-18T00:48:52.217 に答える