public class StreamClientImpl extends Object implements StreamClient
HttpURLConnection
.
This class works around a serious design issue in the SUN JDK, so it will not work on any JDK that
doesn't offer the sun.net.www.protocol.http.HttpURLConnection
implementation.
This implementation DOES NOT WORK on Android. Read the Cling manual for alternatives for Android.
This implementation DOES NOT support Cling's server-side heartbeat for connection checking. Any data returned by a server has to be "valid HTTP", checked in Sun's HttpClient with:
ret = b[0] == 'H' && b[1] == 'T' && b[2] == 'T' && b[3] == 'P' && b[4] == '/' && b[5] == '1' && b[6] == '.';
Hence, if you are using this client, don't call Cling's
RemoteClientInfo.isRequestCancelled()
function on your
server to send a heartbeat to the client!
Modifier and Type | Field and Description |
---|---|
protected StreamClientConfigurationImpl |
configuration |
Constructor and Description |
---|
StreamClientImpl(StreamClientConfigurationImpl configuration) |
Modifier and Type | Method and Description |
---|---|
protected void |
applyHeaders(HttpURLConnection urlConnection,
org.seamless.http.Headers headers) |
protected void |
applyRequestBody(HttpURLConnection urlConnection,
StreamRequestMessage requestMessage) |
protected void |
applyRequestProperties(HttpURLConnection urlConnection,
StreamRequestMessage requestMessage) |
protected StreamResponseMessage |
createResponse(HttpURLConnection urlConnection,
InputStream inputStream) |
StreamClientConfigurationImpl |
getConfiguration() |
StreamResponseMessage |
sendRequest(StreamRequestMessage requestMessage)
Sends the given request via TCP (HTTP) and returns the response.
|
void |
stop()
Stops the service, closes any connection pools etc.
|
protected final StreamClientConfigurationImpl configuration
public StreamClientImpl(StreamClientConfigurationImpl configuration) throws InitializationException
InitializationException
public StreamClientConfigurationImpl getConfiguration()
getConfiguration
in interface StreamClient
public StreamResponseMessage sendRequest(StreamRequestMessage requestMessage)
StreamClient
This method must implement expiration of timed out requests using the
StreamClientConfiguration
settings. When a request expires, a
null
response will be returned.
This method will always try to complete execution without throwing an exception. It will
return null
if an error occurs, and optionally log any exception messages.
The rules for logging are:
FINE
.INFO
level.WARNING
level
This method is required to add a Host
HTTP header to the
outgoing HTTP request, even if the given
StreamRequestMessage
does not contain such a header.
This method will add the User-Agent
HTTP header to the outgoing HTTP request if
the given message did not already contain such a header. You can set this default value in your
StreamClientConfiguration
.
sendRequest
in interface StreamClient
requestMessage
- The message to send.null
if no response has been received or an error occurred.public void stop()
StreamClient
stop
in interface StreamClient
protected void applyRequestProperties(HttpURLConnection urlConnection, StreamRequestMessage requestMessage)
protected void applyHeaders(HttpURLConnection urlConnection, org.seamless.http.Headers headers)
protected void applyRequestBody(HttpURLConnection urlConnection, StreamRequestMessage requestMessage) throws IOException
IOException
protected StreamResponseMessage createResponse(HttpURLConnection urlConnection, InputStream inputStream) throws Exception
Exception
Copyright © 2016 4th Line GmbH, Switzerland. All rights reserved.