【问题标题】:SAXParseException that only occurs locally. Works on WebServers仅在本地发生的 SAXParseException。在 Web 服务器上工作
【发布时间】:2012-12-17 03:00:20
【问题描述】:

我正在编写一个用于测试旧代码的junit 测试。此代码适用于我们的 iplanet 网络服务器和我们的本地 Tomcat 服务器,并且可以正常运行。但是,当由 JUNIT 测试运行时,我得到了这个异常。

背景:它从 JAR 中提取 XSL 文件,然后使用从资源文件中读取的 xml 文档对其进行转换。

我尝试过更改变压器工厂,更改编码,并使用十六进制编辑器检查所有文件的空字符。有什么想法吗?

[致命错误]:2251:46:在属性“test”的值中发现无效的 XML 字符(Unicode:0x0),元素为“xsl:when”。 系统 ID 未知;第 2251 行;第 46 列; org.xml.sax.SAXParseException;行号:2251;列号:46;在属性“test”的值中发现无效的 XML 字符(Unicode:0x0),元素为“xsl:when”。

**更新 我发现如果我使用保存 XSL 的项目的类文件夹并将其移动到 jar 的依赖关系中它可以工作,但是如果它使用 jar 中的 xsl 它会中断

【问题讨论】:

  • 确保您的 JUnit 测试主机中的库版本都与您的 Tomcat 和 iPlanet 服务器上的版本匹配 :)
  • 确实如此。这是我看的第一件事。

标签: xslt junit xalan saxparseexception


【解决方案1】:

建议:

1) 确保您的库版本全部匹配。

2) 我怀疑“找到了一个无效的 XML 字符 (Unicode: 0x0)”可能是由几个完全不同的事情中的任何一个引起的。你应该调查他们每个人。

3) 首先,最明显的 - 检查您的输入是否有空字符:)

4) 其次,检查您的编码 - 也许您的发件人正在编写 UTF-16,但您的读者期待 UTF-8。这是一个很好的链接:

* Error about invalid XML characters on Java

这是一个编码问题。要么您将输入流读取为 UTF8 事实并非如此,或者相反。

您应该在阅读内容时明确指定编码。 例如。通过

new InputStreamReader(getInputStream(), "UTF-8")

另一个问题可能是tomcat。尝试添加URIEncoding="UTF-8" server.xml 文件中的 tomcat 连接器设置

5) 根本原因也可能是读取失败或某种对象丢失。也许是一个缺失的定义。

问:什么是“SystemId”?什么可能导致它“失踪”?

6) 一种可能性是“resolveEntity()”失败:

InputSource resolveEntity(String publicId, String systemId)

这里有几个关于这个问题的链接:

7) 这两个链接都表明“resolveEntity() 可能会失败,因为您无法连接到指定的主机。检查您的 XML 中列出的网络主机名,并确保您可以“ping”他们。

【讨论】:

  • 我不确定 systemId 是什么意思。我已经看到在其他地方列出了这个错误。我认为没有任何遗漏,因为确切的代码在服务器上运行良好。我将检查我的代码以确保在测试代码之前运行的代码不会导致它发生。
【解决方案2】:

如果到达第 2251 行,则强烈表明该位置周围的文件内容有问题。如果该位置的文件没有问题,我的下一个建议是解析器有问题。我知道这听起来很疯狂,但是 JDK 中内置的 XML 解析器存在严重错误,如果您在其位置安装 Apache 版本的 Xerces,我会检查问题是否消失。在许多情况下,这只是将相关 JAR 文件放在 JDK 安装的 lib/endorsed 目录中的问题。

【讨论】:

  • 谢谢,这清除了一些错误。现在它引发了另一个问题:“元素类型“xsl:text”的结束标记必须以'>'分隔符结尾。”我检查了,'>' 位于它说它不是的位置。
  • 我拿了xsl文件和它转换的XML文件,并使用了一个在线转换器,它工作得很好。
  • 显然发生了一些奇怪的事情,如果没有更完整的信息,我们将无法帮助识别它。
【解决方案3】:

这是因为我尝试转换的 XSL 文件仍在 JAR 中。我必须先让 Maven 将文件提取到目标目录中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-19
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多