2012-09-06 60 views
0

我想將我的web應用程序從WAS 7.0.0.7升級到WAS 8.5。該應用程序正常,但只要我想訪問它我得到例外以下部署:Websphere 8遷移 - AbstractMethodError:javax/servlet/ServletRequest.getDispatcherType

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

爲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"> 

回答

0

你的任何機會,包括JAR文件,包含標準Servlet API的,與你的應用程序? 你能列出你的EAR中包含的所有JAR文件嗎?

EDITED從提問者處得到的信息如下:你提到你正在包裝請求對象。我猜測,當你編譯你的代碼時,你正在編譯Servlet 2.4類。這就是編譯通過OK的原因(您不必執行getDispatcherType)。稍後,在運行時,您得到AbstractMethodError,因爲您的包裝器實現不包含現在需要的方法getDispatcherType的實現。

你解決這個問題的唯一方法(依我看來)仍然是針對Servlet 3.0類進行編譯。 WebSphere 8.5將總是假設請求是Servlet 3.0,那麼它是沒有辦法的。

是否有一個原因,你不能針對Servlet 3.0類進行編譯?

+0

我把我所有的罐子都扔了。非他們包含任何性病。 servlet API。我正在做的是出於安全原因包裝原始請求。問題是websphere認爲它是一個java ee 6請求,但是我使用的j2ee 1.4請求不包含getDispatcherType方法。我有沒有機會告訴websphere使用j2ee 1.4 ServletRequest?謝謝 – mobile

+0

至於你的問題 - 不,你不能這樣做(據我所知)。但是,我不完全確定你所描述的實際上是你的問題。在您提到的情況下,AbstractMethodError不會引發。我想我知道發生了什麼 - 我將編輯答案來反映這一點。 – Isaac

+0

是的,我也假設。目前不能升級到Servlet 3.0。所以我想沒有其他的解決方法。 – mobile