`
gqzyyxh
  • 浏览: 9648 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

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 目录挪出就行了。
分享到:
评论

相关推荐

    javax.xml.rpc相关jar包

    描述中提到的“解决javax.xml jar包缺失的问题,引进javax.xml.rpc-api-1.1.1.jar”,意味着在开发或运行某个Java项目时,可能会遇到由于缺少`javax.xml.rpc`相关的jar包导致的编译或运行错误。为了解决这个问题,...

    javax.xml.bind.jar

    【标题】"javax.xml.bind.jar" 是一个Java开发中常用的工具包,主要包含了Java对象到XML数据绑定的API,这是Java标准版(Java SE)的一部分,用于帮助开发者将Java类和XML文档之间的转换自动化,从而简化了XML处理。...

    javax.xml.rpc

    "javax.xml.rpc"是Java平台中的一个关键组件,主要用于实现基于XML的远程过程调用(XML-RPC)服务。这个框架允许Java应用程序通过HTTP协议来调用远程服务器上的方法,从而实现分布式计算。在Java EE环境中,它常与...

    javax.xml.ws.Service 报错需要的包

    在Java开发中,`javax.xml.ws.Service` 是一个核心组件,属于Java API for XML Web Services (JAX-WS)的一部分,用于创建客户端和服务端的Web服务代理。报错通常表明缺少必要的依赖包,这可能会影响到程序的正常运行...

    javax.xml.stream_1.0.1.v201004272200.jar

    javax.xml.stream_1.0.1.v201004272200.jar

    javax.xml.bind.jar 包

    在集成阿里云移动推送时,部署到服务器的时候遇到了java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter 错误,产生原因是缺少javax.xml.bind.DatatypeConverter

    Unable to load class ‘javax.xml.bind.JAXBException‘(csdn).pdf

    在Android Studio中遇到"Unable to load class ‘javax.xml.bind.JAXBException‘"的错误,通常是由于Java运行时环境(JRE)或开发工具包(JDK)与项目的兼容性问题导致的。`javax.xml.bind.JAXBException`是Java的...

    javax.xml.bind.jar和三个sqljdbc4x.jar

    javax.xml.bind.jar和三个sqljdbc4x.jar;实测可用。用于sqlserver连接和出现Java 9 及以上 eclipse 链接 SQL数据库 抛出 java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter 异常

    javax.xml.ws.Service

    【javax.xml.ws.Service】是Java平台上用于Web服务客户端的一个核心接口,它位于Java Web Services (JWS) API中,主要用于创建和使用Web服务。这个接口是JAX-WS(Java API for XML Web Services)规范的一部分,它...

    javax.xml-1.3.4

    首先,`javax.xml.transform`子包是处理XML转换的核心部分。它提供了`Transformer`和`Source`接口,以及`Result`类,用于执行从一个XML源到另一个XML结果的转换。`TransformerFactory`用于创建`Transformer`实例,而...

    javax.ejb.jar下载

    Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty...javax.xml.rpc.handler.MessageContext.class

    com.springsource.javax.xml.rpc-1.1.0.jar

    jar包,官方版本,自测可用

    javax.xml.soap-api-1.4.0.jar

    安卓sdk找不到的api,因此需要引入额外的jar包1

    javax.ejb.rar

    META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.xml javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class ...

    com.springsource.javax.xml.stream-1.0.1.jar

    jar包,官方版本,自测可用

    javax.xml.bind jdk1.5缺包

    标题 "javax.xml.bind jdk1.5缺包" 指出的问题是在使用Java 1.5版本时,遇到了与`javax.xml.bind`相关的类找不到的异常。具体来说,异常信息 "java.lang.ClassNotFoundException: ...

    javax.xml.bind-2.0.jar

    最近在学习Spring MVC 时候遇到了NoClassDefFoundError: javax/xml/bind/JAXBException 错误,产生原因是缺少javax.xml.bind Jar包.

Global site tag (gtag.js) - Google Analytics