当我尝试将应用程序升级到spring Boot 2.4.13并部署到websphere 8.5.5时,它给我以下错误。java.lang.NoSuchMethodError: javax/servlet/http/HttpServletResponse.setContentLengthLong(J)V (loaded from file:/apps/WebSphere85/AppServer/ plugins/javax.j2ee.servlet.jar by org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@ede7c06f) called from class org.springframework.http.server.ServletServerHttpResponse (loaded from file:/applis/196233/was/app_name/installedApps/ app.ear/app-war.war/WEB-INF/lib/spring-web-5.3.20.jar by
我在pom.xml中强制推送了servlet 3.1.0,以避免它使用父类加载器。但它仍然总是从父类加载器中获取jar。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
它与早期版本的spring Boot 2.1.3.RELEASE一起工作。我们不想在服务器中将servlet升级到3.1.0,因为它被不同的应用程序使用。请提供建议
1条答案
按热度按时间pod7payv1#
这不是一个可行的场景。虽然您可以在WebSphere服务器上运行的应用程序中覆盖许多服务器提供的API,但Servlet不是其中之一-Web容器必须链接到服务器中的API版本,并且应用程序不可能在不发生类冲突问题的情况下单独使用该API。相反,当Web容器试图将应用程序的Servlet类强制转换为API的内部示例时,您会遇到ClassCastException。
WebSphere 9支持Java EE 7(包括Servlet 3.1),Liberty支持最新Jakarta EE规范的所有版本,所以如果可以迁移到更新的服务器版本,那就可以了。但是,如果您被锁定到8.5.5,您必须坚持使用最新支持Servlet 3.0的Spring版本。