仅在本地发生的SAXParseException。适用于Web服务器

时间:2013-01-02 18:30:23

标签: xslt junit xalan saxparseexception

我正在编写一个正在测试的junit测试和旧代码。此代码适用于我们的iplanet Web服务器和本地Tomcat服务器,运行时没有任何问题。但是当通过JUNIT测试运行时,我得到了这个异常。

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

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

[致命错误]:2251:46:在属性“test”的值中找到了无效的XML字符(Unicode:0x0),元素为“xsl:when”。 SystemId未知;第#2251行;第46栏; org.xml.sax.SAXParseException; lineNumber:2251; columnNumber:46;在属性“test”的值中找到了无效的XML字符(Unicode:0x0),元素为“xsl:when”。

* * UPDATE 我发现,如果我使用项目的类文件夹,其中包含XSL并将其移动到jar的依赖项,它可以工作,但如果它使用jar中的xsl则会中断

3 个答案:

答案 0 :(得分:0)

SUGGESTIONS:

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”他们。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这是因为我试图转换的XSL文件仍然在JAR中。我必须让Maven首先将文件解压缩到目标目录中。