的SAXParser抛出FileNotFoundException异常,尽管没有给出一个文件来分析

问题描述:

我知道有几个问题的SAXParser那里,但我不能找到一个描述我的问题:的SAXParser抛出FileNotFoundException异常,尽管没有给出一个文件来分析

我有一个字符串包含XML数据,和我我将它传递给一个ByteArrayInputStream:

public boolean parse(String message) { 
     ByteArrayInputStream bis = new ByteArrayInputStream(message.getBytes()); 

我呼吁它

saxparser.parse(bis, handler); //this row throws a FileNotFoundException 

解析方法尽管没有提及任何文件,解析抛出一个FileNotFoundException。 奇怪的是,它试图在我的工作区中找到一个不存在的文件名,后来我发现文件名是由双引号括起来的字符串的一部分(参见下面,我们将其称为“theFile.extension”文件)

编辑:我想,也许我的XML错误地因为某些原因写:

<?xml version="1.0"?> 
<!DOCTYPE presence PUBLIC "Some-valid-stuff" "theFile.extension"> 

我应该从哪里寻找在这种情况下的解决方案?

感谢

+1

DOCTYPE x PUBLIC“...”“location”试图在你的(本地)“位置”找到一个文件。显然你没有它。 – laune

+1

SAX解析器试图使用指定的文件来验证xml。我现在不记得了,但有一种方法可以禁用验证 –

SAX解析器正试图验证使用指定的DTD文件的XML,这就是它试图加载该文件的原因。

您可以禁用验证如下。

saxParserFactory.setValidating(false) 
saxParserFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false) 
+0

这就像一个魅力。不幸的是,我不知道如何从API中弄清楚这一点。你认为我错过了什么,或者只是需要那种经历?非常感谢 –

+0

也许这两个:)。这个异常说它正在寻找DOCTYPE中提到的文件,如果你知道该文件的目的,即验证,那么你可能会在解析器API中查找与验证有关的方法。 –