如何让 Weblogic 10 更喜欢 myApp.war:/WEB-INF/lib/ 中的罐子而不抛出 VerifyErrors?

Posted

技术标签:

【中文标题】如何让 Weblogic 10 更喜欢 myApp.war:/WEB-INF/lib/ 中的罐子而不抛出 VerifyErrors?【英文标题】:How do I make Weblogic 10 prefer the jars in myApp.war:/WEB-INF/lib/ without throwing VerifyErrors? 【发布时间】:2011-09-10 20:00:45 【问题描述】:

Weblogic 类加载器似乎更喜欢系统库而不是我的战争WEB-INF/lib/ 中的库。

我尝试在WEB-INF/weblogic.xml 中设置以下内容,但没有成功:

<weblogic-web-app>
    <container-descriptor>
        <prefer-web-inf-classes>true</prefer-web-inf-classes>
    </container-descriptor>
</weblogic-web-app>

这只是给了我很多验证错误:

exception is java.lang.VerifyError: (class: org/apache/xerces/parsers/AbstractSAXParser, method: parse signature: (Lorg/xml/sax/InputSource;)V) Incompatible object argument for function call
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
        Truncated. see log file for complete stacktrace

(我试图避免将 WAR 打包到 EAR 中。)

【问题讨论】:

这些是什么系统库? prefer-web-inf-classes 应该可以工作,我假设您已经清除了域内的所有临时文件夹和缓存的战争副本? 这与 Weblogic 有用地包含在您的战争类路径中的 JAXP 库有关吗? WebLogic 中有一个新选项可以在 WAR 文件中使用 perfer-application-packages。你用的是什么版本? 如果您想继续对话,请发送电子邮件至 jeffrey.west@oracle.com。比留言板更容易进行迭代工作。我们可以在这里发布结果。 【参考方案1】:

tomcat-arquillian 也有这个问题。原来“xml-apis 2.0.2”在我的类路径中,它实际上是 xml-apis 1.0.b2,它太旧了,无法与需要 xml-apis 1.3.04 的 xercesImpl 2.9.1 兼容。

【讨论】:

【参考方案2】:

除了在启动 Weblogic 时指定 -Djavax.xml.parsers.SAXParserFactory=[xerces sax parser factory class name](对于其他 JAXP 工厂,如验证 SchemaFactory 等等)之外,我一直无法令人满意地解决这个问题。

过滤/prefer-web-inf 的东西都不起作用,可能是因为 Weblogic 在启动时需要 JAXP 库,然后才读取任何 WAR/EAR 配置文件。

【讨论】:

【参考方案3】:

此视频很好地概述了配置 WebLogic FilteringClassLoaders 的选项:

http://www.youtube.com/watch?v=ArLTKapjV_8

【讨论】:

以上是关于如何让 Weblogic 10 更喜欢 myApp.war:/WEB-INF/lib/ 中的罐子而不抛出 VerifyErrors?的主要内容,如果未能解决你的问题,请参考以下文章

weblogic中间件部署的项目,当访问路径找不到资源时,如何让页面不显示资源路径

java script中如何让一个alert每隔10秒出现一次

weblogic10.3.6控制台登录密码忘记如何重置

如何访问 weblogic 10.3.6 中定义的 JNDI 数据源

weblogic10.3.5升级包在哪下载

10大最适合编程的字体推荐下载,让代码看起来更美更舒服!