2016-11-17 12 views
1

私は休憩アプリケーションを持っています。私の目的は、IBM JAX-RSを削除し、RESTEasy JAX-RSの実装を使用することです。私はWAS8を使用しており、これだけを使用したいと考えています。REST APIのRESTEasy JAX-RS実装をテストできません

IBM JAX-RSを無効にするために、IBMRestServletクラスとIBMRestFilterクラスを削除し、管理コンソールでcom.ibm.websphere.jaxrs.server.DisableIBMJAXRSEngine JVM propをtrueに設定しました。 web.xmlのRESTEasyのJAX-RSのimplementaionについては

、追加RESTEasyの-jaxrs POMで依存して設定されたサーブレット

 <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jaxrs</artifactId> 
     <version>3.0.11.Final</version> 
      </dependency> 

のWeb.xml

<context-param> 
    <param-name>resteasy.servlet.mapping.prefix</param-name> 
     <param-value>/</param-value> 
    </context-param> 

    <listener> 
    <listener-class> 
    org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap 
    </listener-class> 
    </listener> 

<servlet> 
<servlet-name>resteasy-servlet</servlet-name> 
<servlet-class> 
    org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher 
</servlet-class> 
    <init-param> 
<param-name>javax.ws.rs.Application</param-name> 
<param-value>com.application.RestApplication</param-value> 
</init-param> 

    </servlet> 

    <servlet-mapping> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

A)は、当初、私は「javaのです。 lang.NoSuchMethodError:org/jboss/resteasy/specimenpl/BuiltResponse.getHeaders() "例外です。様々な答えを見ると、今は、この後、私は取得しています)

 <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>jaxrs-api</artifactId> 
     <version>3.0.11.Final</version> 
     </dependency> 

Bを(このdoesntのは、私には何の意味もかかわらず)のpom.xmlでの最初として、依存関係の下に追加java.lang.NoSuchMethodErrorの:javaxの/ WS /rs/ClientErrorException.validate(Ljavax/ws/rs/core/Response;Ljavax/ws/rs/core/Response$Status$Family;Ljavax/ws/rs/core/Response)

解決を手伝ってもらえますか? A例外とB例外の両方。 WAS8だけでこれを試してみたい。

また、IBM JAX-RSを完全に無効にし、サーバーがREST Easy jaxrsのみを選択していることを確認するにはどうすればよいですか。

答えて

3

"親の最後の"委任モードを使用するようにWebモジュールのクラスローダーを設定しましたか?これは、WebSphereに独自のJAX-RSプロバイダを導入するために必要な要素です。前述したシステムプロパティを使用して組み込みプロバイダを無効にすると、初期化ができなくなりますが、そのクラスはクラスローダーを通じて表示されます。 Webアプリケーションのクラスローダーを構成して、まずローカルクラスをロードする必要があります。

アプリで他の問題を引き起こす「親の最後」の設定が心配な場合は、代わりにJAX-RS APIと実装を共有ライブラリにスローし、共有ライブラリを独立ライブラリクラスローダーを作成し、Webモジュールと関連付けます。これは、クラスローディングのスタイルを得るために、よりターゲットを絞った(そして、より安全な)方法です。

+0

はい、私はそれを変更しました。私のアプリケーションクラスローダーの順序は、ローカルクラスローダーで最初にロードされたクラス(親の最後)です。 – user3766874

+0

アプリケーションではなくWebモジュールで設定したことをもう一度確認します。クラスローダーは別々に用意されています。クラスローダーは別々に設定する必要があります。それが解決されず、APIと実装用のjarファイルの両方がその設定のローダーに含まれていることが確かであれば、おそらくスタックトレースがそれを絞り込むのに役立つかもしれません。何か問題が起きている可能性があります予期しない範囲。 – Jarid

関連する問題