HttpClient-response-handler gibt immer geschlossen-stream

Ich bin neu in der Java-Entwicklung, so bitte Geduld mit mir. Ich hoffe auch, ich bin nicht der champion von tl;dr :).

Ich bin mit HttpClient, um Anfragen über Http (duh!) und ich würde, bekommen Sie zu arbeiten, für ein einfaches servlet, erhält eine URL als query-string-parameter. Ich erkannte, dass mein code könnte etwas refactoring, also habe ich beschlossen, meine eigene HttpResponseHandler, um den code zu bereinigen, damit es wiederverwendbar und verbessern die Behandlung von Ausnahmen.

Ich habe derzeit so etwas wie dieses:

public class HttpResponseHandler implements ResponseHandler<InputStream>{

    public InputStream handleResponse(HttpResponse response)
            throws ClientProtocolException, IOException {

        int statusCode = response.getStatusLine().getStatusCode();
        InputStream in = null;

        if (statusCode != HttpStatus.SC_OK) {
            throw new HttpResponseException(statusCode, null);
        } else {
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                in = entity.getContent();
                //This works
                //for (int i;(i = in.read()) >= 0;) System.out.print((char)i); 
            }
        }
        return in;
    }
}

Und in der Methode, wo ich die eigentliche Anfrage:

HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(target);
ResponseHandler<InputStream> httpResponseHandler = new HttpResponseHandler();
try {
    InputStream in = httpclient.execute(httpget, httpResponseHandler);
    //This doesn't work
    //for (int i;(i = in.read()) >= 0;) System.out.print((char)i);     
    return in;
} catch (HttpResponseException e) {
throw new HttpResponseException(e.getStatusCode(), null);
}

Das problem ist, dass der Eingabe-stream zurück von der hf geschlossen. Ich habe keine Ahnung warum, aber ich habe es mit den Abzügen in meinem code (und Nein, ich habe nicht verwendet Sie beide zur gleichen Zeit :). Während der ersten Druckereien, die andere gibt man einen geschlossenen stream-Fehler.

Brauche ich InputStreams, weil alle meine anderen Methoden erwarten ein InputStream und nicht ein String. Auch ich möchte in der Lage sein, um Bilder (oder vielleicht auch andere Arten von Dateien), nicht nur text-Dateien.

Kann ich umgehen, ist das ziemlich einfach, indem Sie oben auf der response-handler (ich habe eine funktionierende Implementierung, der nicht mit es), aber ich bin ziemlich neugierig auf die folgenden:

  1. Warum tut es was es tut?
  2. Wie öffne ich den stream, wenn etwas es schließt?
  3. Was ist der richtige Weg, dies zu tun, eh :)?

Ich habe die docs und ich konnte nicht finden, dass irgendetwas nützliches zu diesem Thema. Speichern Sie ein bisschen Googeln, hier ist die Javadoc und hier ist die HttpClient tutorial (Abschnitt 1.1.8 - Response-Handler).

Dank,
Alex

InformationsquelleAutor Alex Ciminian | 2010-06-01

Schreibe einen Kommentar