spring 将Sping Boot 升级到2.4.13并部署到websphere 8.5.5 java.lang.NoSuchMethodError:javax/服务小程序/http/HttpServlet响应,设置内容长度长

8xiog9wr  于 2022-12-17  发布在  Spring
关注(0)|答案(1)|浏览(277)

当我尝试将应用程序升级到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,因为它被不同的应用程序使用。请提供建议

pod7payv

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版本。

相关问题