Scala/Java 是否不遵守 w3 的“过量 dtd 流量”规范?
我是Scala的新手,所以我可能不以此为基础,我想知道问题是否出在我的代码上。给定 Scala 文件 httpparse,简化为:
object Http {
import java.io.InputStream;
import java.net.URL;
def request(urlString:String): (Boolean, InputStream) =
try {
val url = new URL(urlString)
val body = url.openStream
(true, body)
}
catch {
case ex:Exception => (false, null)
}
}
object HTTPParse extends Application {
import scala.xml._;
import java.net._;
def fetchAndParseURL(URL:String) = {
val (true, body) = Http request(URL)
val xml = XML.load(body) // <-- Error happens here in .load() method
"True"
}
}
哪个是运行(URL无关紧要,这是一个笑话示例):
scala> HTTPParse.fetchAndParseURL("http://stackoverflow.com")
结果总是:
java.io.IOException: Server returned HTTP response code: 503 for URL: http://www.w3.org/TR/html4/strict.dtd
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1187)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:973)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEnti...
我已经看到了关于Java的Stack Overflow线程,以及W3C的系统团队博客条目,关于不尝试通过Web访问此DTD。我还将错误隔离到XML.load()方法中,据我所知,这是一个Scala库方法。
我的问题:我该如何解决这个问题?这是我的代码的副产品(摘自Raphael Ferreira的帖子),是Java特定的东西的副产品,我需要像上一个线程一样解决,还是Scala特有的东西?此调用发生在哪里,它是 bug 还是功能?(“是我吗?是她,对吧?)