当前位置: 首页 > 面试题库 >

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

龙俊良
2023-03-14
问题内容

我是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特定产品的副产品?该调用在哪里发生,是错误还是功能?( “是我吗?是她,对吗?”


问题答案:

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

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

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

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

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

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

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

希望这对其他人有帮助。



 类似资料:
  • 作为一个相对的Java新手,我很困惑地发现了以下几点: 点. java: Edge.java: 主代码段:私有集blockedEdges 为什么这令人惊讶?因为在我将其编码为依赖平等之前,我检查了留档,它说: 如果该集合包含指定的元素,则返回true。更正式地说,当且仅当这个集合包含元素e,使得(o==null?e==null : o.equals(e)) 这句话非常清楚,它指出只需要相等。f.e

  • 问题内容: 在管道级别,我指定代理和节点(带有标签和自定义工作区)。管道启动时,它将在指定的节点上运行,但是当命中“ build job”时,将选择第一个可用节点。我尝试使用NodeLabel插件,但是那也不起作用。 这是我的: 问题答案: 当您使用Jenkinsfile中的指令时,它告诉Jenkins您想要构建一个完全独立的作业。正是 其他工作 需要指定将要构建的代理。如果这是基于Jenkins

  • 问题内容: Javadoc 表示(重点是我): 该操作的行为明确地是不确定的。 对于并行流管道,此操作不能保证遵守流的遇到顺序 ,因为这样做会牺牲并行性的好处。对于任何给定的元素,可以在库选择的任何时间和线程中执行操作。如果操作访问共享状态,则它负责提供所需的同步。 Java 9 Early Access Javadoc中提供了相同的文本。 第一句话(“明确地不确定”)表明(但未明确说明)此方法未

  • 问题内容: 我正在使用MySQL,并希望利用该属性。默认的MySQL JDBC实现并不真正尊重它。如果将fetchsize设置为fetchsize,则会分别获取每一行,但是考虑到我要使用fetchSize的原因是,我有足够的数据将内存使用量置于2 G范围内,因此每行必须执行一次查询将永远花费。 相反,我想插入一个可与MySQL一起使用的JDBC实现,并适当考虑取回大小,使我可以将fetchsize

  • 问题内容: 结果如下: 2011-09-24 14:10:51 -0400 2011年9月24日星期六20:10:51 为什么当我解析来自format()的日期时,它不遵守时区? 问题答案: 您正在打印调用的结果,该调用 始终 使用默认时区。基本上,除了调试之外,您不应该使用其他任何东西。 不要忘记,一个不 具有 时区-它代表着一个时刻,因为自Unix纪元(午夜1970年1月1日UTC)毫秒。 如

  • 问题内容: 我在进行CSS设计时一直想知道的东西。 是否遵守CSS宽度的小数位数?还是四舍五入? 要么 问题答案: 如果是百分比宽度,那么可以,它是受尊重的。正如Martin所指出的,当您达到小数像素时,事情就会崩溃,但是如果百分比值产生整数像素值(例如,示例中200px的50.5%),您将获得明智的预期行为。 编辑: 我已经更新了示例,以显示小数像素发生了什么(在Chrome中,值被截断了,因此