0

我正在使用供应商小程序,该小程序适用于 JRE 1.4.2_X 和 1.6.X,但在每个版本的 1.5.X 上都失败了。由于另一个应用程序冲突不能与 Java 6 配合使用,因此不能使用 1.6 运行。

我认为的问题是 DTD 没有得到验证。这导致了“未声明”问题和产生的空指针。

 Error: Fri Aug 28 11:21:29 EDT 2009 org.xml.sax.SAXParseException: 
 Element type "UserSessionList" is not declared.
 java.lang.NullPointerException

我尝试更改默认验证类,但问题仍然没有改变。

 -Djavax.xml.validation.SchemaFactory:http://relaxng.org/ns/structure
 /1.0=org.apache.xerces.jaxp.validation.XMLSchemaFactory

我可以为此使用另一个验证吗?

我真的没有选择修改小程序的代码,这超出了供应商的生命周期,因此不太可能从他们那里获得支持。因此,任何解决方法都不能涉及更改代码,因为我们不拥有它。

4

3 回答 3

1

尝试将当前版本的 Xerces 放入类路径中,并去掉所有这些 -D。Xerces 中的 SPI 将接管所有这些,并且可能表现得更好。

于 2009-09-06T12:55:39.327 回答
0

您可以在未修改所有现有代码的情况下部署小程序,并指定它在哪个 Java 版本下执行。您可以通过在小程序中声明一个classid参数来做到这一点,如下所示:

<OBJECT
    classid="clsid:CAFEEFAC-0014-0002-FFFF-ABCDEFFEDCBA"
    width="200" height="200">
    <PARAM name="code" value="Applet1.class">
</OBJECT>

classidsJava的最后四个主要版本有所不同

1.3使用 CAFEEFAC-0013-0001-FFFF-ABCDEFFEDCBA
1.4使用 CAFEEFAC-0014-0002-FFFF-ABCDEFFEDCBA
1.5使用 CAFEEFAC-0015-0000-FFFF-ABCDEFFEDCBA
1.6使用 CAFEEFAC-0016-0000-FFFF-ABCDEFFEDCBA

需要注意的是,客户端计算机必须安装该版本的 Java,但 JRE 仍可在 Sun 的站点上使用。更多信息在这里:http: //java.sun.com/javase/6/webnotes/family-clsid.html

因此,您可以强制您的 applet 仅运行 1.4,并且最终用户是否安装了另一个 Java 版本并不重要,只要他们有 1.4 来运行您的 applet。

于 2009-08-31T14:14:29.497 回答
0

与 Java 1.5 一起使用时,Xerces 中似乎存在错误。请参阅有关此Tomcat 错误的最后一条评论。

于 2009-11-12T01:24:24.170 回答