`
javasogo
  • 浏览: 1825894 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Tomcat 5.0.28中的dwr出TransformerFactoryImpl not found错的处理办法

阅读更多

环境:dwr 1.1.4 + Tomcat 5.0.28 + jdk 1.6.0_03
配置了最基本的 web.xml,加了一个 web.xml 和 RemoteBean,部署后通过网址

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

在 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% 向后兼容而已。

分享到:
评论

相关推荐

    tomcat 5.0.28 安装版

    【描述】:“Tomcat 5.0.28 安装版是Apache软件基金会的Jakarta项目中的一个开源Java Servlet容器,用于部署和运行Java Web应用程序。这个版本在当时是一个广泛使用的版本,可能由于其稳定性和兼容性而受到青睐。...

    TOMCAT 5.0.28的下载地址

    在本篇文章中,我们将深入探讨有关TOMCAT 5.0.28的相关知识点,包括其版本特性、安装过程及应用场景等内容。 ### TOMCAT 5.0.28概述 Apache Tomcat是一款开源的Servlet容器,它实现了Servlet和JavaServer Pages...

    tomcat5.0.28安装版

    Tomcat 5.0.28 是一个历史悠久的版本,它是Apache Tomcat服务器的一个发行版,主要用于部署和运行Java Servlets和JavaServer Pages (JSP)。Tomcat是开源的,且符合Java EE Web Profile规范,是许多开发人员和企业...

    Tomcat 5.0.28服务器安装包

    描述中提到,Tomcat 5.0.28是用作JSP和Servlet容器,这表明它可以解析并执行这两个Java Web技术编写的代码。JSP是一种动态网页技术,允许开发者将HTML和Java代码混合编写,使得网页可以与服务器端的Java代码交互。...

    tomcat5.0.28压缩包

    Tomcat 5.0.28是Apache Tomcat服务器的一个重要版本,它在Java Web开发领域中占据着重要的地位。尽管随着时间的推移,更新的版本如Tomcat 8和9已经发布,但Tomcat 5.0.28因其稳定性和兼容性仍被许多开发者和企业所...

    TOMCAT5.0.28配置说明.doc

    标题与描述均指向同一文档:“TOMCAT5.0.28配置说明.doc”,这表明文档内容主要聚焦于Apache Tomcat 5.0.28版本的配置过程及注意事项。以下将基于给定的部分内容,深入解析TOMCAT5.0.28的配置流程及相关知识点。 ##...

    完整图解 Tomcat 5.0.28 安装笔记

    在正式开始安装Tomcat 5.0.28之前,首先需要确保系统中已安装Java 2 Standard Edition(J2SDK),因为Tomcat服务器是基于Java平台构建的,其运行依赖于J2SDK环境。如果尚未安装J2SDK,可以从Sun Microsystems的官方...

    Tomcat5.0.28下AXIS完全安装手册

    《Tomcat5.0.28下AXIS完全安装手册》 AXIS的安装在不同版本的Tomcat环境下可能会遇到一些挑战,尤其是对于新手来说。本文将详细介绍如何在Tomcat5.0.28下成功安装和配置AXIS,帮助你避开常见的问题,顺利进行SOAP...

    tomcat5.0.28及5.0.30官方绿色解压版

    这个压缩包包含了Tomcat 5.0.28和5.0.30两个版本的官方绿色解压版,这意味着用户无需安装过程,只需解压缩即可立即使用。 Tomcat 5.0系列是Tomcat发展的一个重要阶段,它引入了对Java EE 5规范的支持,包括Servlet ...

    jakarta-tomcat-5.0.28

    Jakarta Tomcat 5.0.28 是一个历史悠久但仍然具有重要参考价值的Java Web应用服务器,尤其对于学习和理解早期的Java EE(当时称为J2EE)环境的开发者而言。Tomcat作为Apache软件基金会的项目,是开源社区中的一个...

    tomcat-5.0.28

    总的来说,Apache Tomcat 5.0.28是一个值得深入研究的版本,它展示了Tomcat在Java Web开发历史中的地位,并且对于那些希望维护旧系统或学习Tomcat早期版本的开发者来说,提供了宝贵的资源。虽然现在有更先进的技术,...

    Apachetomcat-5.0.28

    Apache Tomcat 5.0.28 是一个古老但经典的Java Servlet容器,它实现了Java EE Web应用程序的规范,特别是Servlet和JSP。Tomcat作为开源软件,因其轻量级、高效和易于配置的特点,在Web服务器领域深受开发人员喜爱。...

    Tomcat5.0.28

    标题"Tomcat5.0.28"指的是Apache Tomcat服务器的5.0.28版本。Tomcat是一个开源的应用服务器,主要用于运行Java Servlets和JavaServer Pages (JSP)。这个特定的版本是该软件的一个历史版本,发布于2004年,它提供了一...

    Tomcat5.0.28源代码

    《深入剖析Tomcat 5.0.28源代码》 Tomcat,作为Apache软件基金会下的一个开源项目,是Java Servlet和JavaServer Pages(JSP)的容器,它以其轻量级、高效能和易用性赢得了广大开发者的喜爱。Tomcat 5.0.28是其历史...

    tomcat5.0.28下安装axis所需的4个包

    在IT行业中,Tomcat和Axis是两个非常关键的组件,特别是在Web服务开发和部署中。Tomcat是一款流行的开源Java Servlet容器,它实现了Java EE的Web应用程序部分,而Axis则是Apache软件基金会开发的一个SOAP(简单对象...

    jakarta-tomcat-5.0.28.rar

    【Jakarta Tomcat 5.0.28】是一个经典的Web服务器和应用服务器,它在Java社区中扮演了重要的角色,特别是在开发和部署基于Java Servlet和JavaServer Pages(JSP)的应用程序时。Tomcat是Apache软件基金会 Jakarta...

    Tomcat 5.0.28

    在Tomcat 5.0.28中,一些重要的改进包括性能优化,比如通过调整线程池参数来提高并发处理能力,以及错误处理和日志记录的增强,帮助开发者更好地诊断问题。此外,这个版本还对一些安全漏洞进行了修复,提高了服务器...

    润乾报表在TOMCAT5.0.28服务器下的部署操作介绍

    ### 润乾报表在TOMCAT5.0.28服务器下的部署操作知识点 #### 一、润乾报表简介及版本 润乾报表是一款功能强大的报表设计与展示工具,适用于各种复杂的数据处理和展现需求。润乾报表V4.0版本在此基础上进一步优化了...

Global site tag (gtag.js) - Google Analytics