public class HttpClient
extends java.lang.Object
connectionUrl
, a map of Request headers
(requestPropertiesMap
) and timeout values for connection and read operations (connectTimeout
, readTimeout
).
sendHttpRequest
then the instance of this class can be safely used by multiple
threads and thread-safety is guaranteed. The use-case for this class is for repeated calls to predefined URL(s) with the same headers.
connectionUrl
property (use method setConnectionUrl(String)
)
to value "http://www.some-site/person
", preset all the headers (such "Content-Type", and whatever other headers
required). - Use methods setContentType(String)
and setRequestHeader(String, String)
.
Once this is done use this instance for all invocations to the above APIs:sendHttpRequest(HttpMethod)
or sendHttpRequest(HttpMethod, String)
would be good methods for the first 4 endpoints
and for the address endpoint use method sendHttpRequest(String, HttpMethod, String)
where the URL parameter
should be set to value getConnectionUrl()
+ "/address"
get(Long id), update(...),
create(...), delete(Long id) and updateAddress(...)
. In constructor for this class pre-set all the
relevant environment (headers, connection URL) and in the methods mentioned above invoke appropriate
sendHttpRequest()
method. This way the code will look like
Person person = new Person();
person.create(person);
person.updateAddress(...);
Modifier and Type | Class and Description |
---|---|
static class |
HttpClient.HttpMethod |
Constructor and Description |
---|
HttpClient() |
Modifier and Type | Method and Description |
---|---|
HttpClient |
clearAllRequestProperties()
This method clears all request properties.
|
java.lang.String |
getConnectionUrl()
This method is a getter for connectionUrl property which only makes sense if that property was set.
|
TimeInterval |
getConnectTimeout()
This method returns connection timeout currently in effect.
|
java.lang.String |
getContentType()
This is getter method for content type property.
|
TimeInterval |
getReadTimeout()
This method returns read timeout currently in effect.
|
HttpClient |
removeRequestProperty(java.lang.String propertyName)
This method removes request property
|
ResponseHolder<java.lang.String> |
sendHttpRequest(HttpClient.HttpMethod callMethod)
This method sends HTTP request to pre-set URL.
|
ResponseHolder<java.lang.String> |
sendHttpRequest(HttpClient.HttpMethod callMethod,
java.nio.ByteBuffer data)
This method sends HTTP request to pre-set URL.
|
ResponseHolder<java.lang.String> |
sendHttpRequest(HttpClient.HttpMethod callMethod,
java.lang.String data)
This method sends HTTP request to pre-set URL.
|
ResponseHolder<java.lang.String> |
sendHttpRequest(java.lang.String requestUrl,
HttpClient.HttpMethod callMethod)
This method sends HTTP request to specified URL and uses specified HTTP method.
|
ResponseHolder<java.lang.String> |
sendHttpRequest(java.lang.String requestUrl,
HttpClient.HttpMethod callMethod,
java.nio.ByteBuffer data)
This method sends HTTP request to specified URL, uses specified HTTP method and sends binary data through request body.
|
ResponseHolder<java.lang.String> |
sendHttpRequest(java.lang.String requestUrl,
HttpClient.HttpMethod callMethod,
java.lang.String data)
This method sends HTTP request to specified URL, uses specified HTTP method and sends data through request body.
|
ResponseHolder<java.nio.ByteBuffer> |
sendHttpRequestForBinaryResponse(HttpClient.HttpMethod callMethod)
This method sends HTTP request to pre-set URL.
|
ResponseHolder<java.nio.ByteBuffer> |
sendHttpRequestForBinaryResponse(HttpClient.HttpMethod callMethod,
java.nio.ByteBuffer data)
This method sends HTTP request to pre-set URL.
|
ResponseHolder<java.nio.ByteBuffer> |
sendHttpRequestForBinaryResponse(HttpClient.HttpMethod callMethod,
java.lang.String data)
This method sends HTTP request to pre-set URL.
|
ResponseHolder<java.nio.ByteBuffer> |
sendHttpRequestForBinaryResponse(java.lang.String requestUrl,
HttpClient.HttpMethod callMethod)
This method is the same as
sendHttpRequest(String, HttpMethod) except that it returns ByteBuffer
that holds binary info. |
ResponseHolder<java.nio.ByteBuffer> |
sendHttpRequestForBinaryResponse(java.lang.String requestUrl,
HttpClient.HttpMethod callMethod,
java.nio.ByteBuffer data)
This method is the same as
sendHttpRequest(String, HttpMethod, ByteBuffer) except that it returns
ByteBuffer that holds binary info. |
ResponseHolder<java.nio.ByteBuffer> |
sendHttpRequestForBinaryResponse(java.lang.String requestUrl,
HttpClient.HttpMethod callMethod,
java.lang.String data)
This method is the same as
sendHttpRequest(String, HttpMethod, String) except that it returns
ByteBuffer that holds binary info. |
void |
setConnectionUrl(java.lang.String connectionUrl)
Setter for connectionUrl property.
|
void |
setConnectTimeout(long timeValue,
java.util.concurrent.TimeUnit timeUnit)
This is convenience method that allows to set connection timeout from timeValue and TimeUnit parameters that are used
to instantiate
TimeInterval |
void |
setConnectTimeout(java.lang.String timeIntervalStr)
This is convenience method that allows to set connection timeout from a string that is parsed to
TimeInterval . |
void |
setConnectTimeout(TimeInterval connectTimeout)
This method sets the connection timeout that will remain in effect for all subsequent connection requests until it is
changed by invocation of this or other connection timeout setter methods:
setConnectTimeout(String) ,
setConnectTimeout(long, TimeUnit) |
HttpClient |
setContentType(java.lang.String contentType)
This is setter method for content type property.
|
void |
setReadTimeout(long timeValue,
java.util.concurrent.TimeUnit timeUnit)
This is convenience method that allows to set read timeout from timeValue and TimeUnit parameters that are used
to instantiate
TimeInterval |
void |
setReadTimeout(java.lang.String timeIntervalStr)
This is convenience method that allows to set read timeout from a string that is parsed to
TimeInterval . |
void |
setReadTimeout(TimeInterval readTimeout)
This method sets the read timeout that will remain in effect for all subsequent connection requests until it is
changed by invocation of this or other read timeout setter methods:
setReadTimeout(String) ,
setReadTimeout(long, TimeUnit) |
HttpClient |
setRequestHeader(java.lang.String headerName,
java.lang.String headerValue)
This method is a general request header setter.
|
HttpClient |
setRequestProperty(java.lang.String headerName,
java.lang.String headerValue)
Deprecated.
|
public java.lang.String getConnectionUrl()
public void setConnectionUrl(java.lang.String connectionUrl)
connectionUrl
- public ResponseHolder<java.lang.String> sendHttpRequest(HttpClient.HttpMethod callMethod) throws HttpClientCommunicationException
getConnectionUrl()
to get the URL and uses
specified HTTP method. Obviously it is expected that user should set connectionUrl property by invoking method
setConnectionUrl(String)
beforehand. It returns response
that is expected to be textual such as a String. This method does not send any info through request body.
It may send parameters through URL. So this method fits perfectly for using HTTP GET method. If HTTP request
uses method POST, PUT or any other methods that allow passing info in the request body and there is some info
to be sent then use method sendHttpRequest(HttpMethod, String)
callMethod
- HttpClient.HttpMethod
that specifies which HTTP method is to be usedResponseHolder
that holds response content and metadata from the URLHttpClientCommunicationException
public ResponseHolder<java.lang.String> sendHttpRequest(java.lang.String requestUrl, HttpClient.HttpMethod callMethod) throws HttpClientCommunicationException
sendHttpRequest(String, HttpMethod, String)
requestUrl
- URL to which request is to be sentcallMethod
- HttpClient.HttpMethod
that specifies which HTTP method is to be usedHttpClientCommunicationException
public ResponseHolder<java.lang.String> sendHttpRequest(HttpClient.HttpMethod callMethod, java.lang.String data) throws HttpClientCommunicationException
getConnectionUrl()
to get the URL and uses
specified HTTP method and sends data through request body. Obviously it is expected that user should set connectionUrl
property by invoking method setConnectionUrl(String)
beforehand.
It returns response that is expected to be textual such as a String. This method fits for using HTTP methods
POST, PUT or any other methods that allow passing info in the request body and there is some info to be sent.
If you don't need to send any info as request body, consider using method
sendHttpRequest(HttpMethod)
callMethod
- HttpClient.HttpMethod
that specifies which HTTP method is to be useddata
- String that holds the data to be sent as request bodyHttpClientCommunicationException
public ResponseHolder<java.lang.String> sendHttpRequest(HttpClient.HttpMethod callMethod, java.nio.ByteBuffer data) throws HttpClientCommunicationException
getConnectionUrl()
to get the URL and uses
specified HTTP method and sends binary data through request body. Obviously it is expected that user should set connectionUrl
property by invoking method setConnectionUrl(String)
beforehand.
It returns response that is expected to be textual such as a String. This method fits for using HTTP methods
POST, PUT or any other methods that allow passing info in the request body and there is some binary info to be sent.
This method is useful for uploading files or any other binary info
If you don't need to send any info as request body, consider using method
sendHttpRequest(HttpMethod)
callMethod
- HttpClient.HttpMethod
that specifies which HTTP method is to be useddata
- ByteBuffer that holds the binary data to be sent as request bodyHttpClientCommunicationException
public ResponseHolder<java.lang.String> sendHttpRequest(java.lang.String requestUrl, HttpClient.HttpMethod callMethod, java.lang.String data) throws HttpClientCommunicationException
sendHttpRequest(String, HttpMethod)
requestUrl
- URL to which request is to be sentcallMethod
- HttpClient.HttpMethod
that specifies which HTTP method is to be useddata
- String that holds the data to be sent as request bodyjava.io.IOException
HttpClientCommunicationException
public ResponseHolder<java.lang.String> sendHttpRequest(java.lang.String requestUrl, HttpClient.HttpMethod callMethod, java.nio.ByteBuffer data) throws HttpClientCommunicationException
sendHttpRequest(String, HttpMethod)
requestUrl
- URL to which request is to be sentcallMethod
- HttpClient.HttpMethod
that specifies which HTTP method is to be useddata
- String that holds the data to be sent as request bodyHttpClientCommunicationException
public ResponseHolder<java.nio.ByteBuffer> sendHttpRequestForBinaryResponse(HttpClient.HttpMethod callMethod) throws HttpClientCommunicationException
getConnectionUrl()
to get the URL and uses
specified HTTP method. Obviously it is expected that user should set connectionUrl property by invoking method
setConnectionUrl(String)
beforehand.
This method is the same as sendHttpRequest(HttpMethod)
except that it returns ByteBuffer
that holds binary info. So this methods fits for retrieving binary response such as Image, Video, Audio or any
other info in binary format.callMethod
- HttpClient.HttpMethod
that specifies which HTTP method is to be usedResponseHolder
that holds response content and metadata from the URLHttpClientCommunicationException
public ResponseHolder<java.nio.ByteBuffer> sendHttpRequestForBinaryResponse(java.lang.String requestUrl, HttpClient.HttpMethod callMethod) throws HttpClientCommunicationException
sendHttpRequest(String, HttpMethod)
except that it returns ByteBuffer
that holds binary info. So this methods fits for retrieving binary response such as Image, Video, Audio or any
other info in binary format.requestUrl
- URL to which request is to be sentcallMethod
- HttpClient.HttpMethod
that specifies which HTTP method is to be usedResponseHolder
that holds response content and metadata from the URLHttpClientCommunicationException
public ResponseHolder<java.nio.ByteBuffer> sendHttpRequestForBinaryResponse(HttpClient.HttpMethod callMethod, java.lang.String data) throws HttpClientCommunicationException
getConnectionUrl()
to get the URL and uses
specified HTTP method. Obviously it is expected that user should set connectionUrl property by invoking method
setConnectionUrl(String)
beforehand.
This method is the same as sendHttpRequest(HttpMethod, String)
except that it returns
ByteBuffer
that holds binary info. So this methods fits for retrieving binary response such as Image,
Video, Audio or any other info in binary format.callMethod
- HttpClient.HttpMethod
that specifies which HTTP method is to be useddata
- String that holds the data to be sent as request bodyResponseHolder
that holds response content and metadata from the URLHttpClientCommunicationException
public ResponseHolder<java.nio.ByteBuffer> sendHttpRequestForBinaryResponse(HttpClient.HttpMethod callMethod, java.nio.ByteBuffer data) throws HttpClientCommunicationException
getConnectionUrl()
to get the URL and uses
specified HTTP method. Obviously it is expected that user should set connectionUrl property by invoking method
setConnectionUrl(String)
beforehand.
This method is the same as sendHttpRequest(HttpMethod, ByteBuffer)
except that it returns
ByteBuffer
that holds binary info. So this method fits for sending binary info such as Image,
Video, Audio or any other info in binary format. and then retrieving binary response as well. So this method
might be a good fit for consuming API that receives and returns binary info possibly for modifying images or
binary files such as adding a watermark to an Image for examplecallMethod
- HttpClient.HttpMethod
that specifies which HTTP method is to be useddata
- ByteArray that holds some binary data to be sent as request bodyResponseHolder
that holds response content and metadata from the URLHttpClientCommunicationException
public ResponseHolder<java.nio.ByteBuffer> sendHttpRequestForBinaryResponse(java.lang.String requestUrl, HttpClient.HttpMethod callMethod, java.lang.String data) throws HttpClientCommunicationException
sendHttpRequest(String, HttpMethod, String)
except that it returns
ByteBuffer
that holds binary info. So this methods fits for retrieving binary response such as Image,
Video, Audio or any other info in binary format.requestUrl
- URL to which request is to be sentcallMethod
- HttpClient.HttpMethod
that specifies which HTTP method is to be useddata
- String that holds the data to be sent as request bodyResponseHolder
that holds response content and metadata from the URLHttpClientCommunicationException
public ResponseHolder<java.nio.ByteBuffer> sendHttpRequestForBinaryResponse(java.lang.String requestUrl, HttpClient.HttpMethod callMethod, java.nio.ByteBuffer data) throws HttpClientCommunicationException
sendHttpRequest(String, HttpMethod, ByteBuffer)
except that it returns
ByteBuffer
that holds binary info. So this method fits for sending binary info such as Image,
Video, Audio or any other info in binary format. and then retrieving binary response as well. So this method
might be a good fit for consuming API that receives and returns binary info possibly for modifying images or
binary files such as adding a watermark to an Image for examplerequestUrl
- URL to which request is to be sentcallMethod
- HttpClient.HttpMethod
that specifies which HTTP method is to be useddata
- ByteBuffer that holds the data to be sent as request bodyResponseHolder
that holds response content and metadata from the URLHttpClientCommunicationException
public java.lang.String getContentType()
@Deprecated public HttpClient setRequestProperty(java.lang.String headerName, java.lang.String headerValue)
setRequestHeader(String, String)
insteadheaderName
- if the value of header name is blank or null this method does nothingheaderValue
- Holds the value for the headerpublic HttpClient setRequestHeader(java.lang.String headerName, java.lang.String headerValue)
headerName
- if the value of header name is blank or null this method does nothingheaderValue
- headerValue Holds the value for the headerpublic HttpClient removeRequestProperty(java.lang.String propertyName)
propertyName
- if the value of propertyName is blank or null this method does nothingpublic HttpClient clearAllRequestProperties()
public HttpClient setContentType(java.lang.String contentType)
contentType
- holds content type valuepublic TimeInterval getConnectTimeout()
TimeInterval
public void setConnectTimeout(TimeInterval connectTimeout)
setConnectTimeout(String)
,
setConnectTimeout(long, TimeUnit)
connectTimeout
- public void setConnectTimeout(java.lang.String timeIntervalStr) throws java.lang.IllegalArgumentException
TimeInterval
.timeIntervalStr
- that represents time interval. (See TextUtils.parseStringToTimeInterval(String)
to see
what is expected string format)java.lang.IllegalArgumentException
- if string parameter could not be parsed to TimeInterval
public void setConnectTimeout(long timeValue, java.util.concurrent.TimeUnit timeUnit) throws java.lang.IllegalArgumentException
TimeInterval
timeValue
- numeric time valuetimeUnit
- time unit to interpret time value unitjava.lang.IllegalArgumentException
- if timeValue is negative or TimeUnit is nullpublic TimeInterval getReadTimeout()
TimeInterval
public void setReadTimeout(TimeInterval readTimeout)
setReadTimeout(String)
,
setReadTimeout(long, TimeUnit)
readTimeout
- public void setReadTimeout(java.lang.String timeIntervalStr) throws java.lang.IllegalArgumentException
TimeInterval
.timeIntervalStr
- that represents time interval. (See TextUtils.parseStringToTimeInterval(String)
to see
what is expected string format)java.lang.IllegalArgumentException
- if string parameter could not be parsed to TimeInterval
public void setReadTimeout(long timeValue, java.util.concurrent.TimeUnit timeUnit) throws java.lang.IllegalArgumentException
TimeInterval
timeValue
- numeric time valuetimeUnit
- time unit to interpret time value unitjava.lang.IllegalArgumentException
- if timeValue is negative or TimeUnit is null