DWR文档之常见问题及解答

原文出处: http://www.javatang.com/archives/2007/03/10/1321121.html
翻译: Jet Mah
声明: 请维持文章的完整性任意转载

TransformerFactoryConfigurationError

该错误的堆栈输出(stack trace)如下:

root cause
javax.xml.transform.TransformerFactoryConfigurationError:
Provider org.apache.xalan.processor.TransformerFactoryImpl not found
javax.xml.transform.TransformerFactory.newInstance(Unknown Source)

这主要是因为Tomcat没有正确安装而造成的,而与DWR本身没有太大的关系。最快的解决办法是下载Xalan包并将其放在 $TOMCAT-HOME/common/lib 目录下面。DWR 2.0 在应付此问题上比 DWR 1.x 提升了很多,但此问题最根本的原因在于DWR的XML分析依赖于XSLT分析器。

如果在JDK 5 下出现此问题,可以通过设置如下的VM参数让Tomcat正常运行。

-Djavax.xml.transform.TransformerFactory=
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl

XML 解析错误
开始启动DWR是出现的大多数错误都是 XML 解析错误。这取决于你的Tomcat是否安装 Xerces 包,而与DWR本身无关。

  • JDK 1.3 本身不提供XML解析器,所以你必须需要 xercesImpl.jar 和 xml-apis.jar 包来进行XML解析。
  • JDK 1.4.0 和 JDK 1.4.1 虽然提供了一个XML解析器,但是问题很多。所以你依然需要将xercesImpl.jar 放在 tomcat\common\endorsed 目录下来覆盖默认的XML解析器。
  • JDK 1.4.2 和 JDK 5 非常全面地提供了XML解析,所以不需要额外的jar包。

最后需要说明的是,各个版本的Tomcat要么本身提供XML解析器要么提供相应的jar包。最重要的是要看你所使用的那个版本的JDK是否提供正确的jar包。

BEA Weblogic下的ClassPath问题
在 Weblogic 8.1 (或许也有其他版本)下面有时会出现DWR找不到用户自己创建的类。

如果dwr.jar放在了一个 APP-INF 目录(比如:APP_INF/lib)下面的话就会产生这种问题。在这种情况下,DWR依然会起作用,调试页面也会出现在示例中,但是查找你创建的类的时候会出现问题。

解决的办法是将dwr.jar 放在你自己的 WEB-INF/lib 目录下面。

cookies被禁用的情况下使用 DWR
Servlet 规范支持当 cookies 被禁用的时候使用 URL re-writing 来实现 HttpSessions。DWR 2.x 支持这个功能,但是 DWR 1.x 不支持。你可以通过以下步骤使 DWR 1.x 实现上述功能:

  • 从 dar.jar 中提取出 engine.js 文件,然后像 jsp 文件那样保存到你的文件系统中。
  • 在 “DWREngine._sendData = function(batch)” 函数中增加一行:statsInfo += ";jsessionid=" + <%="'"+session.getId()+"'"%>

通过上述修改之后 DWR 1.x 也可以支持 url-rewriting 了,而 DWR 2+ 本身就支持这个功能。

Annotations 和 Websphere
Websphere 对 Java5 支持比较晚,所以有一些版本的 Websphere 与 Java5 代码不兼容。DWR 1.x 中不包含 Java5 特有的代码,所以不会出现问题。DWR 2.x 包含了 Java5 支持的内容。在使用Websphere / DWR 2.x 的时候可能会出现下面的控制台信息:

TRAS0014I: The following exception was logged
java.lang.LinkageError: LinkageError while defining class:
org.directwebremoting.annotations.AnnotationsConfigurator

Could not be defined due to:
org/directwebremoting/annotations/AnnotationsConfigurator
(Unsupported major.minor version 49.0)

This is often caused by having a class defined at multiple
locations within the classloader hierarchy. Other potential
causes include compiling against an older or newer version of
the class that has an incompatible method signature.

上面的错误信息说明 Websphere 不能正常运行。

依然有问题?
如果在此没有发现你要的答案,请加入新闻组 到那里去问问。

英文出处:
http://getahead.org/dwr/fixes
DWR文档翻译文档列表:
http://www.javatang.com/dwr-chinese-documents/

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注