首页 > 解决方案 > WebLogic 12.2.1:使用 EAR 中的版本覆盖 common_modules 中的 Jackson 库

问题描述

鉴于在 WebLogic 12.2.2.1 上部署了带有 Jackson 2.8.10 的 Spring 4.3.11-RELEASE Web 应用程序,我们遇到了问题,因为正在加载的 Jackson 版本是 WLS 中的旧版本oracle_common/modules树中的旧版本,它优先于其他版本图书馆。

我们尝试了以下方法:

  1. 在 weblogic.xml 中添加首选项语句

<prefer-application-packages> <package-name>com.fasterxml.jackson.*</package-name> </prefer-application-packages>

使用-verbose:class标志运行清楚地表明正在加载坏罐子:

[从文件加载 com.fasterxml.jackson.databind.type.ArrayType:/u01/oracle/oracle_common/modules/com.fasterxml.jackson.core.jackson-databind.jar]

  1. 将 com.fasterxml.jackson.* jar 文件放在域lib文件夹中

没有任何效果。

另外,请注意这是一个共享的 WebLogic 实例,我们只有域文件夹的写入权限,所以我们不能做一些创造性的想法,比如从 oracle_common 文件夹中物理删除有问题的遗留 Jackson jar,或者弄乱 patch_classpath 或类似的东西。

非常感谢任何帮助!

标签: springjacksonweblogic12c

解决方案


问题是该prefer-application-packages指令被放在 EAR 内的 WAR 包内的 weblogic.xml 中,并且类路径没有按正确的顺序选择它:

foo-ear -> foo.war -> WEB-INF/weblogic.xml

我们通过将指令置于 EAR 级别来解决它: foo-ear -> META-INF -> weblogic-application.xml

现在它工作正常。


推荐阅读