3

作为我们应用程序的一部分,我们使用 apache 的 xerces jaxp 解析器。当我们在 weblogic 9.2 上部署应用程序时,我们收到以下错误。

org.springframework.beans.factory.BeanCreationException:在类路径资源 [META-INF/cxf/cxf.xml] 中定义名称为“org.apache.cxf.wsdl.WSDLManager”的 bean 创建错误:bean 的实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.apache.cxf.wsdl11.WSDLManagerImpl]:构造函数抛出异常;嵌套异常是 java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

根据我们的分析,weblogic 正在尝试加载它自己的DocumentBuilderFactoryImpl,它存在于weblogic.jar中,而不是 apache 的 xerces。

我们尝试了以下方法来强制 weblogicDocumentBuilderFactoryImpl从 xerces加载

i) 我们已将以下标签添加到weblogic.xml

<prefer-web-inf-classes>true</prefer-web-inf-classes>

ii) 我们已将最新版本的 xalan 放在 jre/lib/endorced 文件夹中。这并没有解决我们的问题。

ii) 我们在 weblogic-application.xml 中添加了条目

<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
 <application-param>
  <param-name>webapp.encoding.default</param-name>
  <param-value>UTF-8</param-value>
 </application-param>
 <prefer-application-packages>
  <package-name>javax.jws.*</package-name>
  <package-name>org.apache.xerces.*</package-name>
  <package-name>org.apache.xerces.jaxp.*</package-name>
 </prefer-application-packages>
</weblogic-application>

ii) 在 weblogic-application.xml 中添加了以下条目

<xml> 
  <parser-factory> 
    <saxparser-factory>org.apache.xerces.jaxp.SAXParserFactoryImpl</saxparser-factory> 
    <document-builder-factory>org.apache.xerces.jaxp.DocumentBuilderFactoryImpl</document-builder-factory> 
    <transformer-factory>org.apache.xalan.processor.TransformerFactoryImpl</transformer-factory>
  </parser-factory> 
</xml>

iii) 添加从 xercesjaxp.properties加载到 jre/lib 并启动服务器。在这种情况下,weblogic 没有启动。DocumentBuilderFactoryImpl

iv)然后我们先启动服务器,然后在服务器启动jaxp.properties的运行时复制文件。但没有成功

以上都不适合我们。

非常感谢任何帮助。

4

4 回答 4

2

你做了很多事情,我不了解确切的状态。我的建议是严格遵循我过去在 WLS 9.2 中成功使用的 WebLogic应用程序服务器特定配置指南。

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
    <application-param>
        <param-name>webapp.encoding.default</param-name>
        <param-value>UTF-8</param-value>
    </application-param>
    <prefer-application-packages>
        <package-name>javax.jws.*</package-name>
    </prefer-application-packages>
</weblogic-application>

您当然必须在下面添加更多包prefer-application-packages来设置 Weblogic ClassLoader 过滤,但在问题的当前状态下,不可能提供准确的答案。


以防万一,您可以尝试盲目地使用weblogic-application.xml来自该线程的:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
    <xml>
      <parser-factory>
        <saxparser-factory>
          org.apache.xerces.jaxp.SAXParserFactoryImpl
        </saxparser-factory>
        <document-builder-factory>
          org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
        </document-builder-factory>
        <transformer-factory>
          org.apache.xalan.processor.TransformerFactoryImpl
        </transformer-factory>
      </parser-factory>
    </xml>
    <application-param>
        <param-name>webapp.encoding.default</param-name>
        <param-value>UTF-8</param-value>
    </application-param>
    <prefer-application-packages>
        <package-name>javax.jws.*</package-name>
        <package-name>org.apache.xerces.*</package-name>
        <package-name>org.apache.xalan.*</package-name>
    </prefer-application-packages>
</weblogic-application> 

但这是在黑暗中拍摄的。

于 2010-03-19T00:03:22.240 回答
1

我设法通过简单的解决方案解决了找不到 DocumentBuilderFactory的问题。

尝试将 xercesImpl.jar 复制到 weblogic MyDomain\servers\MyServer\lib 上的域特定 lib 目录。

于 2011-04-05T06:37:21.403 回答
1

您可以尝试强制使用指定的文档构建器工厂作为命令行选项:

-Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

这是假设您的类路径中有所需的 Xerces 构建器工厂类。

通常,您不应再使用单独的 xerces.jar,除非某些遗留代码需要。Xerces 解析器类随 JRE 一起提供,包名只是以 com.sun.org.apache 而不是 org.apache 开头。你也可以试试

-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

并从您的类路径中完全删除 xerces.jar(这是我们在 WLS 10.3 和 Java 1.6 上所做的)。

于 2010-03-22T08:32:18.723 回答
0

就我而言,问题是我依赖于commons-digester,而后者又使用了另一个版本的xerces(导致冲突)。因此,您可以查看您的依赖关系,以防传递包含其他版本的xerces 。

于 2011-07-13T08:11:51.840 回答