Jar冲突问题



我正在使用aws-sdk包从部署在websphere应用程序中的web应用程序访问aws-api。在构建过程中,应用程序不会引发任何编译时问题。部署后,它抛出java.lang.NoSuchFieldError:org/apache/http/conn/ssl/AllowAllHostnameVerifier。INSTANCE

我读了一些帖子,上面说罐子冲突。它采用了来自IBM的默认httpclient jar。我想把我的代码指向我在lib文件夹中给出的httpclient版本。有人能帮我指出我的代码来选择我手动添加的jar版本吗。

为了让你的应用程序使用服务器中包含的东西的自己版本,你需要使用parent-last-class-loader委托。假设Apache HTTP客户端位于web模块的web-INF/lib目录中,则需要对web模块的类加载器设置进行更改(此文档专门来自8.5.5,但应适用于过去十年左右的任何版本(:https://www.ibm.com/docs/en/was-nd/8.5.5?topic=loading-配置web模块类加载器

请注意,parent-list委托有其自身的一系列风险,因为如果您尝试在应用程序中使用某个版本,有些事情会对服务器产生不利影响(Servlet API是其中一个更值得注意的版本(。如果您尝试了这种方法,但遇到了ClassCastExceptions或LinkageErrors之类的问题,您可能希望将HTTP客户端放入一个隔离的共享库中(选择"为该共享库使用隔离的类加载器"选项(,并将共享库与您的web模块或应用程序相关联:https://www.ibm.com/docs/en/was-nd/8.5.5?topic=servers-管理共享库

尽管如此,最简单的解决方案可能只是更新服务器。几年前的APAR(PI50993,包含在fixpack 8.5.5.9中(删除了服务器版本的Apache HTTP客户端的应用程序可见性。转移到最近的补丁包可能也会解决这个问题。

最新更新