Java parse(InputStream)返回null
我正在修复一个关于DocumentBuilder.parse的现有代码上的错误。我有以下代码:Java parse(InputStream)返回null,java,xml,Java,Xml,我正在修复一个关于DocumentBuilder.parse的现有代码上的错误。我有以下代码: String theOutput; theOutput = response.encodeURL(prefix + "/include/sampleForConversion.jsp?" + request.getQueryString(); StreamSource xmlSource = new StreamSource(new URL(theOutput).openStream
String theOutput;
theOutput = response.encodeURL(prefix + "/include/sampleForConversion.jsp?" + request.getQueryString();
StreamSource xmlSource = new StreamSource(new URL(theOutput).openStream(), "http://sampleApps.net/static/dataDef1.1.dtd");
Document xmlDoc = dBuilder.parse(xmlSource.getInputStream());
我不明白为什么xmlDoc的值为空,尽管我有输出和xmlSource变量的有效值。请帮忙
谢谢 流很有可能被正确解析,因为
xmlDoc.toString()。这并不表示DOM树是空的。请先检查文档是否有一些节点(子节点)
如果DOM真的是空的,那么我首先将输入流的内容打印到控制台(可能xmlSource.getInputStream().toString()
已经返回了内容),以检查内容是否格式正确,再次检查dtd文件是否可访问(浏览器),最后,将XML文档和dtd转储到文件中,以检查XML内容是否有效
啊,等等,我以为第二个参数是DTD文件的URI,但字符串是xml文档的systemId(public StreamSource(InputStream InputStream,string systemId)
)。这可能是一个问题-StreamSource类将使用此URI解析相对URI(如DTD)。只是为了澄清:您是否有(xmlDoc==null)=true
或者您是否得到了一个空文档([[文档:null]
)?解析方法应该返回一个文档或抛出一个异常,但决不返回null
…您好,我得到[#document:null][#document:null]
并不意味着一个null文档,这只是文档写得很糟糕的toString()
输出。@Andreas\D您在哪里找到这个“决不返回null”的行为记录?谢谢@魏世增,这是一个新闻报道。如果发生任何解析异常,它将抛出SAXException
<代码>IOException
如果发生任何I/O错误;和IllegalArgumentException
如果输入为null
。即使这并没有穷尽所有的错误情况,在JDK中,@returns
文档通常会提到null
,如果它是一个可能的返回值。在这些情况下,此方法是否会返回null或抛出异常DocumentBuilder.parse(InputStream)
感谢您告诉我:xmlDoc.toString()将始终为“[#document:null]”