2013-05-14 12 views
5

Sto riscontrando qualche strano problema di JSoup durante l'esecuzione della mia applicazione JavaFX dal browser (o come avvio Web).JSoup genera java.io.IOException in modo casuale: lo streaming viene chiuso durante l'esecuzione dal browser

Quando si esegue da dentro l'IDE (Eclipse o Netbeans) o come un'app standalone, viene eseguito normalmente. Quando provo a eseguire come avvio Web o dal browser (Chrome), JSoup genera casualmente una "java.io.IOException: stream is closed".

Il sito che sto cercando di analizzare è thepiratebay.sx. Quando eseguo per la prima volta l'applicazione (dal browser), ottengo questo errore. Con l'applicazione in esecuzione, se provo ad analizzare di nuovo, che funziona ... a volte. Codice

Il JSoup:

try { 
    //TODO: Change to HttpFetcher. This method is reporting "stream is closed" when running on browser 
    Connection con = Jsoup.connect(url) 
      .timeout(HTTP_TIMEOUT) 
      .userAgent(UserAgentGenerator.getUserAgent()) 
      .followRedirects(false); 
    doc = con.get(); 
    System.out.println("Fetching... " + url); 
} catch (IOException e) { 
    e.printStackTrace(); 
    System.out.println("Parser connect must have timed out, no results. " + url); 
    fetchFailed[i] = true; 
    continue; 
}  
finally { 
    i++; 
    if (CommonTFUtils.isAllTrue(fetchFailed)) { 
     throw new HttpException("Fetcher failed on every URL of " + response.getSite_name()); 
    } 
} 

E l'eccezione generata:

CacheEntry[http://thepiratebay.sx/browse/207/0/7]: updateAvailable=true,lastModified=Tue May 14 14:28:16 BRT 2013,length=-1 
java.io.IOException: stream is closed 
    at sun.net.www.http.ChunkedInputStream.ensureOpen(Unknown Source) 
    at sun.net.www.http.ChunkedInputStream.read(Unknown Source) 
    at java.io.FilterInputStream.read(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.close(Unknown Source) 
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:468) 
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:410) 
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:164) 
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:153) 
    at com.package.torrent.parser.GenericParser.search(GenericParser.java:147) 
    at com.package.torrent.parser.GenericParser.browse(GenericParser.java:82) 
    at com.package.search.TrackerSearch.searchTracker(TrackerSearch.java:69) 
    at com.package.search.TrackerSearch.searchAllTrackers(TrackerSearch.java:40) 
    at com.package.search.TrackerSearch.searchAllTrackers(TrackerSearch.java:23) 
    at com.package.search.MovieBrowser.browseTrackers(MovieBrowser.java:49) 
    at com.package.ui.browse.BrowseController$MovieBrowserTask.call(BrowseController.java:237) 
    at com.package.ui.browse.BrowseController$MovieBrowserTask.call(BrowseController.java:213) 
    at javafx.concurrent.Task$TaskCallable.call(Task.java:1259) 
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

Qualcuno ha un'idea di quello che potrebbe essere la causa?

Grazie in anticipo.

+1

Questo è un problema noto con JSoup. https://github.com/jhy/jsoup/issues/336 – Skylion

risposta

2

Penso di aver trovato una soluzione. Inserisci questo codice prima di chiamare JSoup. Apparentemente, le applet e il web start impostano questo valore su true. Ora, mi chiedo perché Sun ti costringa ad accedere a una variabile statica in modo non statico.

new URL("jar:file://dummy.jar!/").openConnection().setDefaultUseCaches(false); 

JSoup non gestisce bene quando l'URL è memorizzato nella cache e lo considera come un'eccezione.

Problemi correlati