`
jiashaoshan
  • 浏览: 9867 次
  • 性别: 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 目录挪出就行了。

我按上面介绍的第二种方法,删除了endorsed下面的两个jar文件,再重启tomcat,查看日志,果然没报上面的那个错误,但一运行,还是不能显示该项目。

第二步:

查看MyEclipse下console控制台,发现有

严重: Error filterstart错误

上网查了一下:原文如下:

最近使用上了Tomcat 5.5,只是这东西在你最需要的时候,往往令你很失望。
  缘由代码要提交到CVS,删除了一些测试使用的类以及页面文件,只是当时忽略了去注释掉所删除的类在Struts.xml里Action映射。紧接着重新启动Tomcat,只是该站点无法访问,仔细查看Tomcat 5.5的日志,就发现:

严重: Error filterStart

       信息,当时就检查初始化Struts2的Filter以及初始化对应的Servlet- api.jar,没有发现什么问题。最后实在没有办法,直接使用Tomcat 6,其启动时候抛出的异常告诉我无法加载在struts.xml配置的Java 类。这时候,我才明白,原来问题所在。
一旦struts.xml文件所配置的类在初始化的时候一旦不存在,则造成整个站点无法访问。

        最后教训,一旦在struts.xml配置的类,若丢失的话,会影响整个站点的运行。

        建议大家可以直接把站点直接放在Tocmat 6下面,用于取代tomat 5.5。Tomcat 5.5的错误日志太让人寒心了~

”其启动时候抛出的异常告诉我无法加载在struts.xml配置的 Java 类“

这名话是关键,说的很明确说是找不着java类,在我的程序里就是 LoginAction这个类,怎么会找不到呢,上struts.xml文件里一看,天啊,应该是 class="com.test.action.LoginAction",而我写的是"com.test.LoginAction",改过以后,运行,好使!!!
分享到:
评论

相关推荐

    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"找不到的问题通常需要检查项目配置,特别是类路径和构建设置,确保所有的依赖都被正确地引入和解析。同时,理解XML-RPC和Web服务的基本概念以及它们在Java环境中的实现,有助于排查和...

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

    总的来说,解决`javax.xml.ws.Service` 报错的关键在于识别缺失的依赖,配置endorsed目录(如果必要),以及正确管理项目的类路径。通过理解Java的类加载机制和依赖管理,可以有效地避免这类问题,确保Web服务的顺利...

    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.stream_1.0.1.v201004272200.jar

    javax.xml.stream_1.0.1.v201004272200.jar

    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.servlet jar包---解决找不到javax.servlet.*等问题

    当你遇到“找不到javax.servlet.*”这样的错误时,通常是因为你的项目缺少了这个库,所以需要引入`javax.servlet.jar`来解决问题。 1. **Java Servlet简介** Java Servlet是Java平台上的一个标准,用于扩展服务器...

Global site tag (gtag.js) - Google Analytics