【转】javax.xml.transform.TransformerFactoryConfigurationError
第一步:
去看tomcat的webapps,里邊也部署上了。接著用昨天剛學的一招必殺,呵呵!去看C:\Program Files\Apache Software Foundation\Tomcat 5.0\logs下的日志,顯示javax.xml.transform.TransformerFactoryConfigurationError Provider org.apache.xalan.processor.TransformerFactoryImpl not found
后來上網搜了一下:找到了一篇文章,說該問題是由于tomcat 里C:\Program Files\Apache Software Foundation\Tomcat 5.0\common\endorsed下的兩個有關xml的jar文件和JDK里的xml解析器沖突造成的:原文如下:
http://localhost:8080/testdwr/dwr?訪問
頁面出現錯誤
javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
uk.ltd.getahead.dwr.convert.DOMConverter.<init>(DOMConverter.java:157)
這是一個 XML 解析器的問題,我們能直接能理解的就是 TransformerFactoryImpl 找不到,那么這個類在哪個包里呢? xalan,就去 apache 網上下載到 xalan.jar 包扔到應用的 WEB-INF/lib 目錄中,重啟 Tomcat 就能OK 了。
上面是第一種解決辦法。問題是解決了,但是根由何在?難道就不能用別的 XML 解析器呢,難道 JDK 和 Tomcat 就沒有為我們預備好對于 dwr 可用的 XML 解析器嗎?先說個背景
·JDK1.3 沒有 XML 解析器,所有要自己配上 xercesImpl.jar 和 xml-apis.jar
·JDK 1.4.0 和 JDK 1.4.1 雖然具有了 XML 解析器,但是有些 Bug,所有還是得把 xercesImpl.jar 放到 Tomcat/common/endorsed 目錄中覆蓋掉默認的解析器
·JDK 1.4.2 及后來版本的 XML 解析器可以工作的很好
·最后,那個出現錯誤本質原因還得由下面慢慢道來……
這樣就是說 JDK 1.4.2 及更新版本根本用不著 xercesImpl.jar 和 xml-apis.jar 幫忙了。只要我們細心些就能發現在 Tomcat5.0.x/common/endorsed 目錄中有兩個包 xercesImpl.jar 和 xml-apis.jar。因為 Tomcat 加載 endorsed 中的包是通過參數 -Djava.endorsed.dirs="X:\Tomcat5.0.x\common\endorsed" 加載的,所以放在 endorsed 目錄中的包要優于 JDK 的 rt.jar,所以要用 JDK 的 XML 解析器必須把 xercesImpl.jar 和 xml-apis.jar 從 endorsed 目錄中移去,這是第二種解決辦法。
再靜心想一想,問題在 XML 解析器,為何偏偏是 org.apache.xalan.processor.TransformerFactoryImpl 這樣的類名呢?這讓我不免思考起 JDK 1.4 及 JDK 1.5 以上版本的差異來,再次回想起為何 Tomcat 5.5.x 版本需要 JDK 1.5 以上的版本來。
不妨做個實驗,dwr 1.1.4 + JDK 1.4.2 + Tomcat 5.0.x,xercesImpl.jar 和 xml-apis.jar 仍舊讓它們在 endorsed 目錄中,運行最基本的 dwr 程序沒一點問題。那為什么換個JDK就又行了呢?原因就在 xml-apis.jar 中指定了 TransformerFactory 的實現類全名為 org.apache.xalan.processor.TransformerFactoryImpl,它存在于 JDK 1.4.2 的 rt.jar 包中,而在 JDK 1.5 的 rt.jar 包中根本就沒有 apache 的包了,所以它不行,再進一步,其實第二種解決辦法如果用的是 JDK 1.5 以上版本僅僅需要把 xml-apis.jar 包從 endorsed 目錄挪出就行了。
?
--------------------------------------華麗的分割線----------------------------------------
?
在Tomcat上部署Ehcache Server時出現一個小問題Java代碼
問題的提示說少xalan包,上網看了一下發現時jdk1.5 與 tomcat5.0之間的關于 TransformerFactoryImpl類的沖突造成的。
解決方法,首先下載“xalan系列jar包”,然后將tomcat中目錄下:/tomcat/common/endorsed/(xercesImpl.jar和xml-apis.jar)刪掉,然后將下載的xalan系列jar包(包括serializer.jar、xalan.jar、xercesImpl.jar、xml-apis.jar、 xsltc.jar)拷貝到/tomcat/common/endorsed目錄,重啟Tomcat即可。
以后還是使用Tomcat5.5好些。
?
?
?
?
轉載于:https://www.cnblogs.com/niuxiaohao/archive/2010/10/27/1862726.html
總結
以上是生活随笔為你收集整理的【转】javax.xml.transform.TransformerFactoryConfigurationError的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式Linux驱动程序
- 下一篇: 编写一个基本的Android程序