如何在部署企业应用程序时配置 Weblogic 12.1.3 以使用旧版本的 Jersey

How to configure Weblogic 12.1.3 to use older version of Jersey while deploying Enterprise App

我已经安装了 Weblogic 12.1.3 作为从 Weblogic 10.3.6 升级到 Weblogic 12.1.3 的一部分 我的应用程序使用 Jersey 版本 1.17 jar 然而,在我们安装 Weblogic 12.1.3 之后,我们在文件夹 ORACLE_HOME/oracle_common/modules 中得到了 Jersey 1.18 Jars Jersey 1.18 Jars 覆盖了捆绑在我们的应用程序中的 Jersey 1.17 jar,并导致部署我们的应用程序时出错。

我们收到 error/warning 条消息,如下所示

警告:Return 类型 javax.xml.bind.JAXBElement 方法 public javax.xml.bind.JAXBElement com.ipc.dms.dsfs.service.rs.DSFSResource.getEnterpriseContacts(java.lang.String,java.lang.Integer,java.lang.Integer,java.lang.String) 无法解析为具体类型

警告:Return 类型 javax.xml.bind.JAXBElement 方法 public javax.xml.bind.JAXBElement com.ipc.dms.dsfs.service.rs.DSFSResource.getMediaServiceConfigList(java.lang.String) 无法解析为具体类型

应用程序正在使用已加载 from:file:/opt/oracle/oracle_common/modules/jersey-servlet-1.18.jar 的 ServletContainerInitializer class com.sun.jersey.server.impl.container.servlet.JerseyServletContainerInitializer。此初始化器覆盖系统中可用的初始化器。 **********>

java.lang.NoClassDefFoundError: 无法初始化 class org.jgroups.conf.XmlConfigurator 在 org.jgroups.conf.ConfiguratorFactory.getXmlConfigurator(ConfiguratorFactory.java:216) 在 org.jgroups.conf.ConfiguratorFactory.getStackConfigurator(ConfiguratorFactory.java:93) 在 org.jgroups.JChannel.(JChannel.java:142)


如果我们从 ORACLE_HOME/oracle_common/modules 中删除 Jersey 1.18 Jars,我们不会收到这些错误消息。

但是,从安装文件夹中删除 jars 会导致其他问题 issues.To 具体来说,如果我从 ORACLE_HOME/oracle_common/modules

中删除 Jersey 1.18 jars,我会遇到下面提到的问题

weblogic.kernel.Default(自调整)'> <> <> <> <1467281457661> <无法将应用程序的激活状态设置为 true "dunkin"。 weblogic.application.ModuleException: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy 在 weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140) 在 weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)


所以,我需要知道在 Weblogic 12.1.3 上部署应用程序时是否可以配置我们的 EAR 以使用旧版本的 Jersey,即 Jersey 1.17。

如果是,请提供配置详细信息。

您有 2 个选择:

  1. 在你耳朵的weblogic-application.xml中包含<prefer-application-packages>标签如下:

    <weblogic-application> <prefer-application-packages> <package-name>com.sun.jersey.*</package-name> </prefer-application-packages> </weblogic-application>

  2. <wls:prefer-web-inf-classes> 标签包含在 war 文件的 weblogic.xml 中,如下所示:

    <wls:container-descriptor> <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes> </wls:container-descriptor>

如果您决定使用选项 2,那么 weblogic 的所有公共库都将被您应用程序的库覆盖。所以我建议选择选项 1。