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 | 查看次数: 1721
服务器托管 [2009-11-04 10:17 AM]
标题: 服务器托管
链接: http://www.cncnet.com.cn/
摘要: 服务器托管6232

服务器托管 [2009-11-04 10:16 AM]
标题: 服务器托管
链接: http://www.zhujituoguan010.com.cn/
摘要: 服务器托管5632

烤瓷牙 [2009-11-04 10:16 AM]
标题: 烤瓷牙
链接: http://www.jiameidental.com/
摘要: 烤瓷牙7189

牙科门诊 [2009-11-04 10:15 AM]
标题: 牙科门诊
链接: http://www.jiameidental.com/
摘要: 牙科门诊6432

服务器托管 [2009-10-26 09:00 AM]
标题: 服务器托管
链接: http://www.cncnet.com.cn/zgcIDC.html
摘要: 服务器托管8771

企业宣传片 [2008-02-15 04:41 PM]
标题: 企业宣传片
链接: http://www.zhuantipian.com
摘要: 专业企业宣传片制作就找上海广告摄像协会,021-63214311

集体照 [2008-02-14 12:31 AM]
标题: 集体照
链接: http://www.easthy.com/shexiang_2_5.html
摘要: 逸海影视制作公司专业提供集体照拍摄,员工合影,企业专题片,宣传片,产品推广片,资料片等广告摄影摄像,另有商务摄像,会议摄像,年会摄像,同传租赁等。业务电话:021-63295935

商务摄像 [2008-02-13 12:27 AM]
标题: 商务摄像
链接: http://www.zhuantipian.com
摘要: 专业商务摄像就找上海广告摄像协会,021-63214311

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