`
energykey
  • 浏览: 598208 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

tomcat5 xml解析问题

阅读更多
写道
环境: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% 向后兼容而已。

参考资料:1. 在tomcat5.0.28下配置DWR出错
2. TransformerFactoryImpl not found exception

 

以上来自google,我试了下,tomcat5.5+jdk1.5一切正常,tomcat5.0+jdk1.5把common下面那两个包删除即可。

分享到:
评论

相关推荐

    tomcat配置文件web.xml与server.xml解析

    Tomcat 配置文件 web.xml 与 server.xml 解析 Tomcat 配置文件 web.xml 和 server.xml 是 Tomcat 自身的配置文件,用于配置 Tomcat 服务器的行为和性能。在本文中,我们将对 web.xml 和 server.xml 中的主要配置项...

    Tomcat Web.xml 详解

    ### Tomcat Web.xml 详解 #### 一、概述 `web.xml` 文件是 Java Web 应用中的核心配置文件之一,它定义了应用程序的各种配置信息,包括但不限于 Servlet 的配置、过滤器(Filter)的配置、监听器(Listener)的...

    flex-web工程载入tomcat下xml文件(含源码)

    5. **XML数据处理**:在`loadData()`函数中,`xml = XML(urlLoad.data);`将加载的XML数据转换为`XML`对象,便于进一步操作。`trace(xml);`用于在控制台打印XML内容,用于调试和查看数据。 6. **XMLListCollection与...

    tomcat5/tomcat5.5安装包

    同时,它还改进了安全管理,增强了日志功能,以及对XML解析器的升级。 而Tomcat 5.5版本是5.0的后续版本,它进一步提升了性能和稳定性,增加了对Servlet 2.5和JSP 2.1规范的支持。此外,5.5版本还引入了更强大的...

    tomcatserver.xml配置详解.pdf

    Tomcat server.xml文件的配置直接影响到Tomcat服务器的行为和性能,了解每个配置项的含义及作用是进行Tomcat优化和问题排查的基础。通过适当配置server.xml,可以实现对Tomcat服务器的个性化管理,如增加安全性、...

    tomcat常见问题分析

    在分析Tomcat常见问题时,我们经常会遇到各种各样的错误,这些错误可能涉及到服务器配置、依赖库、系统环境以及应用程序本身。以下是一些常见的问题及其解决方案: 首先,Jdk版本不匹配是导致Tomcat无法正常运行的...

    tomcat6 server.xml 详解

    理解并掌握server.xml的配置对于优化Tomcat的性能、扩展功能以及解决部署问题至关重要。开发者可以根据需求调整相关参数,如增大最大连接数、设置线程池大小、配置SSL连接器以支持HTTPS等。同时,合理配置Valves和...

    tomcat server.xml 配置

    通过上述分析可知,`server.xml`配置文件是Tomcat运行的基础,通过对其中各元素的合理配置,不仅可以满足基本的应用部署需求,还能实现更为复杂的场景,如多域名绑定、项目映射等。掌握这些配置技巧,能够帮助开发者...

    tomcat server.xml的典型配置

    将`URIEncoding`设置为`utf-8`可以确保所有接收到的URL参数都按照UTF-8编码进行解码,避免了中文或其他多字节字符的解析问题。例如: ```xml URIEncoding="utf-8" connectionTimeout="20000" redirectPort=...

    tomcat的server.xml标签全解析.

    【Tomcat的Server.xml配置...当遇到性能问题、安全需求或其他高级功能时,对`server.xml`的深入理解和适当调整将变得尤为关键。因此,花时间学习和理解这个文件的各个元素及其交互,将使你在运维Tomcat时更加得心应手。

    quartz实例 自动生成 表达式 动态更新 xml文件 tomcat自动加载

    这个实例主要探讨如何使用Quartz实现自动化的任务调度,包括自动生成表达式、动态更新XML配置文件以及在Tomcat服务器上实现自动加载。 首先,Quartz的核心在于Job和Trigger。Job是实际执行的任务,而Trigger则定义...

    Tomcat的server.xml文件

    《深入解析Tomcat的server.xml文件》 在Java Web开发中,Tomcat作为一个广泛应用的开源Servlet容器,扮演着至关重要的角色。它的配置核心在于`server.xml`文件,这是Tomcat服务器的主要配置文件,包含了服务器的...

    Tomcat(二) Tomcat实现:Servlet与web.xml介绍 以及 源码分析Tomcat实现细节1

    5. **Tomcat源码分析** 对于Tomcat的实现细节,主要关注以下几点: - **启动/初始化**:Tomcat启动时会解析web.xml,创建并初始化应用的组件。 - **并发线程模式**:Tomcat使用线程池来处理并发请求,提高性能。 ...

    tomcat_server.xml_配置详解

    本文将详细解析`server.xml`中的关键元素、属性及其含义,帮助读者深入理解Tomcat的工作机制。 1. `&lt;Server&gt;`元素 `&lt;Server&gt;`元素是整个Tomcat实例的顶级容器,它由`org.apache.catalina.Server`接口定义。此元素...

    tomcat启动原理解析

    - `webapps`目录下的每个应用都有对应的`WEB-INF/web.xml`,定义了应用的部署信息,Tomcat会逐一解析这些文件。 3. **JVM启动** - Tomcat通过`bin/startup.sh`(或`.bat`)脚本启动,这个脚本最终调用`catalina....

    tomcat5 linux 版

    5. **Tomcat配置**:在`conf`目录下,有`server.xml`、`web.xml`等配置文件,需要根据需求调整服务器端口、连接器、数据源、JSP编译选项等。 6. **部署Web应用**:应用通常放置在`webapps`目录下,`.war`文件会自动...

    Professional Apache Tomcat 5

    - **故障排查**:介绍常见的问题及其解决方法,包括日志分析、堆栈跟踪和性能监控工具的使用。 - **安全性和最佳实践**:探讨如何增强Tomcat的安全性,包括SSL/TLS的配置、防火墙设置和权限控制。 ### 结论 《专业...

    Tomcat 5帮助文档

    Tomcat 5是一款开源的Java Servlet容器,由Apache软件基金会的Tomcat项目开发维护。它主要负责解析并执行Java Servlets以及服务JavaServer Pages (JSP)。作为轻量级应用服务器,Tomcat以其小巧、高效、易于配置而受...

    tomcat_server.xml_配置详解.doc

    《深入解析Tomcat Server.xml配置文件》 在Java Web应用的开发与部署中,Apache Tomcat作为一款开源的Servlet容器,扮演着至关重要的角色。它的灵活性和可定制性,很大程度上依赖于`server.xml`配置文件。本文将对`...

    tomcat服务器的Server.xml配置详解.docx

    本文将深入解析Server.xml的结构和配置要素,帮助读者更好地理解和操作Tomcat服务器。 Server.xml文件是Tomcat的全局配置文件,它定义了服务器的基本架构,包括Server、Service、Connector和Engine等关键组件。下面...

Global site tag (gtag.js) - Google Analytics