org.jvnet.robust_http_client

## Class RetryableHttpStream

- java.lang.Object
- - java.io.InputStream
  - - org.jvnet.robust_http_client.RetryableHttpStream

All Implemented Interfaces:
  Closeable, AutoCloseable

    public class RetryableHttpStream
    extends InputStream

`InputStream` implementation around `HttpURLConnection` that automatically reconnects if the connection fails in the middle.

Author:
  Kohsuke Kawaguchi

### Field Summary

Fields
`HttpURLConnection` `connection` `HttpURLConnection` to allow the caller to access HTTP resposne headers.
`protected Proxy` `proxy` Proxy, or null none is explicitly given (Java runtime may still decide to use a proxy, though.)
`protected int` `read` Number of bytes read so far.
`int` `totalLength` Total bytes of the entity.
`URL` `url` Where are we downloading from?

### Constructor Summary

Constructors
Constructor and Description
`RetryableHttpStream(URL url)` Connects to the given HTTP/HTTPS URL, by using the proxy auto-configured by the Java runtime.
`RetryableHttpStream(URL url, Proxy proxy)` Connects to the given HTTP/HTTPS URL, by using the specified proxy.

### Method Summary

All Methods Instance Methods Concrete Methods
`protected HttpURLConnection` `connect()` Opens the URL and makes a connection.
`int` `read()`
`int` `read(byte[] b, int off, int len)`
`protected void` `shallWeRetry()` Subclass can override this method to determine if we should continue to retry, or abort.

### Methods inherited from class java.io.InputStream

`available, close, mark, markSupported, read, reset, skip`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### url

    public final URL url

Where are we downloading from?

#### proxy

    protected final Proxy proxy

Proxy, or null none is explicitly given (Java runtime may still decide to use a proxy, though.)

#### totalLength

    public final int totalLength

Total bytes of the entity.

#### read

    protected int read

Number of bytes read so far.

#### connection

    public final HttpURLConnection connection

`HttpURLConnection` to allow the caller to access HTTP resposne headers. Do not use `URLConnection.getInputStream()`, however.

### Constructor Detail

#### RetryableHttpStream

    public RetryableHttpStream(URL url)
                        throws IOException

Connects to the given HTTP/HTTPS URL, by using the proxy auto-configured by the Java runtime.

Throws:
  `IOException`

#### RetryableHttpStream

    public RetryableHttpStream(URL url,
                               Proxy proxy)
                        throws IOException

Connects to the given HTTP/HTTPS URL, by using the specified proxy.

Parameters:
  `proxy` - To force a direct connection, pass in `Proxy.NO_PROXY`.
Throws:
  `IOException`

### Method Detail

#### connect

    protected HttpURLConnection connect()
                                 throws IOException

Opens the URL and makes a connection.

Throws:
  `IOException`

#### shallWeRetry

    protected void shallWeRetry()
                         throws IOException

Subclass can override this method to determine if we should continue to retry, or abort.

If this method returns normally, we'll retry. By default, this method retries 5 times then quits.

Throws:
  `IOException` - to abort the processing.

#### read

    public int read()
             throws IOException

Specified by:
  `read` in class `InputStream`
Throws:
  `IOException`

#### read

    public int read(byte[] b,
                    int off,
                    int len)
             throws IOException

Overrides:
  `read` in class `InputStream`
Throws:
  `IOException`