私は 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 のシステム チーム ブログ エントリを見てきました。また、私が知る限り、Scala ライブラリ メソッドである XML.load() メソッドにエラーを分離しました。
私の質問: どうすればこれを修正できますか? これは、私のコードの副産物 ( Raphael Ferreira の投稿から引用)、前のスレッドのように対処する必要がある Java 固有の副産物、または Scala 固有の副産物ですか? この呼び出しはどこで行われていますか? また、バグまたは機能ですか? (「私ですか?彼女ですよね?」)