java学习网为广大的java爱好者提供最全最新的java教程 java源代码,希望大家多多支持本站,更多的java教程 java源码尽在java学习
Google
 

Tomcat 5.0.28中dwr出TransformerFactoryImpl not found

页面出现错误

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 目录挪出就行了。

在 Tomcat5.0.x 的 common/endorsed 目录中放上 xercesImpl.jar 和 xml-apis.jar 是为 JDK 1.4.2 之前版本不健康的 XML 解析器而考虑的。再如前面所说,JDK 1.4.2 的 XML 解析器已经很好了,再试验用 JDK 1.4.2 时,把 xercesImpl.jar 和 xml-api.jar 从 endorsed 目录中移开,效果会如何呢?一切正常。还需注明点就是,如要用的 JDK 1.4.x,只移开 xml-api.jar,还留有 xercesImpl.jar 在 endorsed 目录中仍会报错的。

就如勒威耶根据天王星轨道的摄动,运用万有引力定论计算出了海王星的位置并由伽勒观察到了海王星;既然 Tomcat5.5.x 是为 JDK 1.5 以上版本而设计,而在 JDK 1.5 的 rt.jar 中没有 xalan,就不应该在 endorsed 目录中制造些杂音的,果如其然,打开 Tomcat5.5.x 的 common/endorsed 目录中空空如也。由此可证明 JDK 1.5 和 Tomcat 5.5.x 搭配 dwr 能顺顺当当的。

别说这么伟大,回想起曾经有一次碰到这种问题时,什么也没想直接就把 xercelImpl.jar 和 xml-apis.jar 移出 endorsed 目录,居然能这么神奇的瞎猫撞老鼠般的解决一个问题,实属幸运。今天正式去用 DWR 碰到麻烦才来了解个究竟,问题只要你愿深入,就能悟出些门道来。并非高版本的 JDK 就能很好的向后兼容,与应用服务器也要注意正确的搭配,SUN 好像也只是对 Solaris 承诺过二进制 100% 向后兼容而已。


文章来自: 本站原创
引用通告地址: http://www.java125.cn/trackback.asp?tbID=2547
Tags:
评论: 1 | 引用: 277 | 查看次数: 1722
淘宝 [2010-07-03 00:42 AM]
标题: 淘宝
链接: http://www.sinyv.com/
摘要: 欢迎访问新雨淘宝网站。4483

brand clothing [2010-07-03 00:42 AM]
标题: brand clothing
链接: http://www.ankvi.com
摘要: brand clothing5153

淘宝店铺 [2010-07-03 00:41 AM]
标题: 淘宝店铺
链接: http://tb.cun0.com/
摘要: 淘宝店铺8059

北京服务器托管 [2010-07-03 00:39 AM]
标题: 北京服务器托管
链接: http://www.cncnet.com.cn/
摘要: 北京服务器托管2475

减肥 [2010-07-01 07:16 AM]
标题: 减肥
链接: http://sinyv.com/
摘要: 减肥3541

淘宝 [2010-07-01 07:06 AM]
标题: 淘宝
链接: http://www.sinyv.com/
摘要: 欢迎访问新雨淘宝网站。4722

剃须刀 [2010-07-01 06:56 AM]
标题: 剃须刀
链接: http://www.vvaabb.cn
摘要: 剃须刀5124

淘宝网女装 [2010-07-01 06:49 AM]
标题: 淘宝网女装
链接: http://laitao.sinyv.com/
摘要: 淘宝网女装9707

发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码:
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 20 字 | UBB代码 关闭 | [img]标签 关闭