小编典典

Scala / Java是否不遵守w3“过多的dtd流量”规范?

java

我是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线程
,以及有关不尝试通过Web访问此DTD 的W3C的System Team
Blog条目
。我也将错误隔离到XML.load()方法,据我所知,这是一个Scala库方法。

我的问题:我该如何解决? 这是我的代码的副产品(从Raphael
Ferreira的帖子中
抄录),还是我需要在上一个线程中解决的Java特定产品的副产品,还是Scala特定产品的副产品?该调用在哪里发生,是错误还是功能?( “是我吗?是她,对吗?”


阅读 277

收藏
2020-12-03

共1个答案

小编典典

有用。经过一些侦探工作,我可以详细了解它们的详细信息:

尝试解析开发性的RESTful接口时,我构建了解析器并得到了上面的(而不是类似的)错误。我尝试了各种参数来更改XML输出,但是得到了相同的错误。我尝试连接到一个我迅速跳动的XML文档(从界面本身开始愚蠢地抄写),并得到相同的错误。然后,我尝试连接任何东西,只是为了踢球,并得到相同(同样,可能只有相似)的错误。

我开始质疑这是源程序还是程序错误,因此我开始四处搜寻,这看起来像是一个持续存在的问题-
在同一主题上有很多Google和SO命中。不幸的是,这使我专注于错误的上游(语言)方面,而不是对源本身进行更多的下游故障排除。

快进,解析器突然对 原始
XML输出起作用。我确认服务器端还做了一些其他工作(只是一个疯狂的巧合?)。我没有早期的XML,但怀疑它与要更改的文档标识符有关。

现在,解析器可以在RESTful接口以及我可以使用的任何格式良好的XML上正常工作。在我尝试过的所有XHTML
DTD(例如www.w3.org)上,它也都失败了。这与@SeanReilly的预期相反,但似乎与W3的说法保持一致

我还是Scala的新手,因此无法确定我是否有特殊情况或典型情况。我也不能保证这个问题不会以另一种形式再次出现。除非确实使用了类似于@GClaramunt $
@ J-16 SDiZ所建议的解决方案,否则拉XHTML似乎会继续导致此错误。我真的没有资格知道这是语言问题还是解决方案的实施(可能是稍后的问题)

在最近的时间范围内,我怀疑最好的解决方案对我来说应该是确保有 可能 解析该XML源,而不是看到其他源具有相同的错误并假定该语言存在功能性问题。 。

希望这对其他人有帮助。

2020-12-03