2010-03-15 90 views
3

作爲我們應用程序的一部分,我們使用apache的xerces jaxp解析器。當我們在weblogic 9.2上部署應用程序時,我們得到以下錯誤。啓動weblogic時java.lang.ClassCastException:org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.cxf.wsdl.WSDLManager' defined in class path resource [META-INF/cxf/cxf.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.wsdl11.WSDLManagerImpl]: Constructor threw exception; nested exception is java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl 

根據我們的分析中,WebLogic試圖加載自己的DocumentBuilderFactoryImpl這是目前在的weblogic.jar,而不是Apache的Xerces。

我們嘗試了以下迫使weblogic的從Xerces的

加載DocumentBuilderFactoryImpl我),我們添加了以下標籤進入weblogic.xml

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

II),我們已經把xalan的最新版本的JRE/lib/endorced文件夾。這並沒有解決我們的問題。

ⅱ)我們已經添加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> 

ⅱ)添加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> 

ⅲ)添加jaxp.properties加載DocumentBuilderFactoryImpl從xerces到jre/lib並啓動服務器。在這種情況下,weblogic沒有啓動。

Ⅳ),則我們首先啓動的服務器,然後在運行時複製的jaxp.properties文件時,服務器starts.But沒有成功

以上都不爲我們工作。

任何幫助,高度讚賞。

回答

2

你做了很多事情,我不明白確切的狀態。我的建議是嚴格遵循我以前用WLS 9.2成功使用的WebLogic的Application Server Specific Configuration Guide

<?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 filtering但在問題的當前狀態,這是不可能提供一個確切的答案。


以防萬一,你也許可以嘗試盲目使用weblogic-application.xmlthis thread

<?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> 

但是,這是一個在黑暗中拍攝。

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 

可以嘗試從classpath中完全刪除xerces.jar的(這是我們做了WLS 10.3和Java 1.6)。

1

我設法解決了問題DocumentBuilderFactory找不到用簡單的解決方案。

嘗試將xercesImpl.jar複製到weblogic MyDomain \ servers \ MyServer \ lib上特定於域的lib目錄。

0

在我的情況下,問題是,我在公共沼氣池這反過來使用的Xerces(導致衝突)另一版本做了依賴。因此,您可以查看您的依賴關係,以防其他版本的xerces被傳遞地包含在內。

相關問題