Jestem nowy w Scala, więc mogę być poza tym, chcę wiedzieć, czy problem jest mój kod. Biorąc pod uwagę plików httpparse Scala, uproszczone do:Czy Scala/Java nie przestrzega specyfikacji "wlotu dtd" w w3?
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"
}
}
który jest prowadzony z (URL nie ma znaczenia, jest to przykład żart):
scala> HTTPParse.fetchAndParseURL("http://stackoverflow.com")
Wynik niezmiennie:
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...
Zobaczyłem Stack Overflow thread na ten temat w odniesieniu do Java, a także W3C's System Team Blog entry o nie próbuje uzyskać dostęp do DTD za pośrednictwem Internetu. Wyodrębniłem również błąd metody XML.load(), która jest metodą biblioteki Scala, o ile wiem.
Moje pytanie: Jak mogę to naprawić? Czy jest to coś, co jest produktem mojego kodu (cribbed z Raphael Ferreira's post), jest produktem czegoś specyficznego dla Javy, który muszę adresować jak w the previous thread, lub czymś, co jest specyficzne dla Scala? Gdzie to się dzieje, i czy jest to błąd lub funkcja? („Czy to ja To ona, prawda?”)
Masz już odpowiedź, ale ja chcesz skomentować wpis blogu W3C: zgodnie ze specyfikacją XML, jeśli używasz identyfikatora SYSTEM, parser musi mieć możliwość pobrania tej treści: http://www.xml.com/axml/target.html#dt- sysid - nawet jeśli nie zmieniło się od lat. Połączyłem się ze specyfikacją z adnotacjami (stworzenie Tima Braya, jednego z oryginalnych edytorów specyfikacji), ponieważ ma ładny komentarz do identyfikatorów SYSTEM i PUBLIC. – kdgregory
@kdgregory, ale to się nie liczy, ponieważ mettadore zawartości próbuje odzyskać * nie jest XML *. –
przeczytaj uważniej: "URL nie ma znaczenia, to jest przykład na żart"; znajdź jakąkolwiek stronę, która produkuje poprawny XHTML i będziesz mieć ten sam problem – kdgregory