0

Web アプリケーションを WAS 7.0.0.7 から WAS 8.5 にアップグレードしたいと考えていました。アプリケーションは正常にデプロイされますが、アクセスしようとするとすぐに次の例外が発生します。

java.lang.AbstractMethodError: javax/servlet/ServletRequest.getDispatcherType()Ljavax /servlet/DispatcherType

WAS 8 は Servlet 3.0 コンテナーを使用しますが、アプリケーションで使用しているバージョン 2.4 と下位互換性があるはずです。

クラスローディングを PARENT LAST に設定しても、同じエラーが発生します。

Websphere は、Servlet 3.0 以降で使用できる getDispatcherType() を呼び出しています。なんで?

次の web.xml ヘッダーを使用します

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
     version="2.4">
4

1 に答える 1

0

ひょっとして、標準のサーブレット API を含む JAR ファイルをアプリケーションに含めていませんか? EAR に含まれるすべての JAR ファイルをリストできますか?

質問者からの次の情報を編集しました:リクエストオブジェクトをラップしていると述べました。コードをコンパイルしたとき、サーブレット 2.4 クラスに対してコンパイルしていたと思います。そのため、コンパイルは問題なく行われました (実装する必要はありませんでしたgetDispatcherType)。後で実行時に、AbstractMethodErrorラッパー実装に現在必要なgetDispatcherTypeメソッドの実装が含まれていないため、取得します。

これを解決する唯一の方法 (私の意見では) は、引き続き Servlet 3.0 クラスに対してコンパイルすることです。WebSphere 8.5 は、要求が Servlet 3.0 であると常に想定します。これを回避する方法はありません。

Servlet 3.0 クラスに対してコンパイルできない理由はありますか?

于 2012-09-07T23:33:00.697 に答える