java 升级到 WAS 7 后的 javax.servlet.UnavailableException

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12496492/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 09:09:16  来源:igfitidea点击:

javax.servlet.UnavailableException after an upgrade to WAS 7

javajakarta-eewebsphere-7websphere-6.1

提问by Mike

I have migrated my application from WAS 6 to WAS 7. The code is not showing any compilation error or missing anything, but when I am trying to run the application, I get following exception.

我已将我的应用程序从 WAS 6 迁移到 WAS 7。代码没有显示任何编译错误或丢失任何内容,但是当我尝试运行该应用程序时,出现以下异常。

 [9/19/12 9:45:37:609 EDT] 00000009 extension     W com.ibm.wsspi.webcontainer.extension.WebExtensionProcessor createServletWrapper Servlet action is currently unavailable: SRVE0203E: Servlet [action]: com.ibm.services.tools.citrus.ctl.ActionServlet was found, but is missing another required class.
    SRVE0206E: This error typically implies that the servlet was originally compiled with classes which cannot be located by the server.

So I checked the ffdc exception trace and I found out following exception. I have include all the jar which were referred by the old configuration.

所以我检查了 ffdc 异常跟踪,我发现了以下异常。我已经包含了旧配置引用的所有 jar。

    [9/19/12 9:26:53:328 EDT]     FFDC Exception:javax.servlet.UnavailableException SourceId:com.ibm.ws.webcontainer.webapp.WebApp.handleError ProbeId:912 Reporter:com.ibm.ws.webcontainer.webapp.WebAppImpl@475c475c
javax.servlet.UnavailableException: SRVE0203E: Servlet [action]: com.ibm.services.tools.citrus.ctl.ActionServlet was found, but is missing another required class.
SRVE0206E: This error typically implies that the servlet was originally compiled with classes which cannot be located by the server.
SRVE0187E: Check your class path to ensure that all classes required by the servlet are present.SRVE0210I: This problem can be debugged by recompiling the servlet using only the classes in the application's runtime class path
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:534)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:179)
    at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:354)
    at com.ibm.ws.webcontainer.webapp.WebApp.sendError(WebApp.java:3369)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3968)
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:931)
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
    at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
    at com.ibm.io.async.ResultHandler.run(ResultHandler.java:905)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1604)

And I want to understand what is the mean by this problem can be debugged by recompiling the servlet using only the classes in the application's runtime class path.

我想了解这个问题是什么意思,可以通过仅使用应用程序运行时类路径中的类重新编译 servlet 来调试。

回答by Alexander Torstling

The error indicates that your servlet is importing or is otherwise dependent on classes which are no longer available after the upgrade. Since the exception does not name the class which is missing, WAS suggests that you compile your app against the WAS 7 libraries. If you do this, the compiler will tell you which dependent class is missing. You are probably compiling against WAS 6, or some other libraries, which is why the error is delayed until runtime.

该错误表明您的 servlet 正在导入或依赖升级后不再可用的类。由于异常未命名缺少的类,WAS 建议您针对 WAS 7 库编译您的应用程序。如果你这样做,编译器会告诉你缺少哪个依赖类。您可能正在针对 WAS 6 或其他一些库进行编译,这就是错误延迟到运行时的原因。

回答by Hridesh

Following may be reason for same issue.

以下可能是同一问题的原因。

  1. Used libraries/jar is not compatible for ur java version on which application is build.
  2. In my case, i had use two utility.jar(for others may be any other jars) one is build with compatible and one is build with higher version. Solved:When removed higher version jar.
  1. 使用的库/jar 与构建应用程序的 Java 版本不兼容。
  2. 就我而言,我使用了两个utility.jar(对于其他人可能是任何其他jar),一个是兼容的构建,一个是更高版本的构建。 已解决:删除更高版本的 jar 时。

回答by Madhu

Followed below steps which solved the issue:

按照以下步骤解决了问题:

1.Pointed JRE and server versions to java 8. i.e, The version under Window -> Preferences -> Java -> Installed JREs version and runtime environment of WAS server should be same. 2.Then rebuilt the ears, redeployed these ears on server, after this I am able to run the application

1.将JRE和服务器版本指向java 8.即Window -> Preferences -> Java -> Installed JREs下的版本和WAS服务器的运行环境应该是一样的。2.然后重建耳朵,在服务器上重新部署这些耳朵,之后我就可以运行应用程序了