Skip to content

Commit bb80519

Browse files
author
mizantrop2397
authored
Merge pull request #267 from art-community/feature/keep-alive-policy-soap
add keep alive policy for SOAP Communicator
2 parents 6b43582 + 8108650 commit bb80519

File tree

10 files changed

+48
-24
lines changed

10 files changed

+48
-24
lines changed

application-http-client/src/main/java/ru/art/http/client/communicator/HttpCommunicationConfiguration.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,14 @@
2626
import ru.art.entity.Value;
2727
import ru.art.entity.interceptor.*;
2828
import ru.art.entity.mapper.*;
29-
import ru.art.http.client.constants.*;
3029
import ru.art.http.client.constants.HttpClientModuleConstants.*;
3130
import ru.art.http.client.handler.*;
3231
import ru.art.http.client.interceptor.*;
3332
import ru.art.http.constants.*;
3433
import static lombok.AccessLevel.*;
3534
import static ru.art.core.context.Context.*;
3635
import static ru.art.core.factory.CollectionsFactory.*;
37-
import static ru.art.http.client.constants.HttpClientModuleConstants.HttpClientKeepAliveHeaderStrategy.CONSIDER;
38-
import static ru.art.http.client.constants.HttpClientModuleConstants.HttpClientKeepAliveHeaderStrategy.IGNORE;
36+
import static ru.art.http.client.constants.HttpClientModuleConstants.ConnectionClosingPolicy.CLOSE_AFTER_RESPONSE;
3937
import static ru.art.http.client.module.HttpClientModule.*;
4038
import static ru.art.http.constants.HttpMethodType.*;
4139
import java.nio.charset.*;
@@ -58,7 +56,7 @@ class HttpCommunicationConfiguration {
5856
private HttpCommunicationCancellationHandler<?> cancellationHandler;
5957
private boolean chunkedBody;
6058
private boolean gzipCompressedBody;
61-
private HttpClientKeepAliveHeaderStrategy keepAliveResponseHeaderStrategy = IGNORE;
59+
private ConnectionClosingPolicy connectionClosingPolicy = CLOSE_AFTER_RESPONSE;
6260
private RequestConfig requestConfig = httpClientModule().getRequestConfig();
6361
private HttpVersion httpProtocolVersion = httpClientModule().getHttpVersion();
6462
private MimeToContentTypeMapper producesMimeType = httpClientModule().getProducesMimeTypeMapper();

application-http-client/src/main/java/ru/art/http/client/communicator/HttpCommunicationExecutor.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@
3232
import ru.art.entity.Value;
3333
import ru.art.entity.interceptor.*;
3434
import ru.art.entity.mapper.*;
35-
import ru.art.http.client.constants.*;
3635
import ru.art.http.client.exception.*;
3736
import ru.art.http.client.handler.*;
3837
import ru.art.http.client.interceptor.*;
3938
import ru.art.http.constants.*;
39+
import ru.art.http.constants.HttpHeaders;
4040
import ru.art.http.mapper.*;
4141
import static java.text.MessageFormat.*;
4242
import static java.util.Objects.*;
@@ -52,9 +52,9 @@
5252
import static ru.art.http.client.body.descriptor.HttpBodyDescriptor.*;
5353
import static ru.art.http.client.builder.HttpUriBuilder.*;
5454
import static ru.art.http.client.constants.HttpClientExceptionMessages.*;
55-
import static ru.art.http.client.constants.HttpClientModuleConstants.HttpClientKeepAliveHeaderStrategy.CONSIDER;
56-
import static ru.art.http.client.constants.HttpClientModuleConstants.HttpClientKeepAliveHeaderStrategy.IGNORE;
55+
import static ru.art.http.client.constants.HttpClientModuleConstants.ConnectionClosingPolicy.CLOSE_AFTER_RESPONSE;
5756
import static ru.art.http.client.module.HttpClientModule.*;
57+
import static ru.art.http.constants.HttpHeaders.KEEP_ALIVE;
5858
import static ru.art.logging.LoggingModule.*;
5959
import javax.annotation.*;
6060
import java.util.*;
@@ -91,9 +91,20 @@ private static <ResponseType> ResponseType executeHttpUriRequest(HttpCommunicati
9191
} catch (Throwable throwable) {
9292
throw new HttpClientException(throwable);
9393
} finally {
94-
if (nonNull(httpResponse) && configuration.getKeepAliveResponseHeaderStrategy() == IGNORE) {
94+
if (nonNull(httpResponse)) {
9595
try {
96-
httpResponse.close();
96+
switch (configuration.getConnectionClosingPolicy()) {
97+
case CLOSE_AFTER_RESPONSE:
98+
httpResponse.close();
99+
break;
100+
case CLOSE_IF_NOT_KEEP_ALIVE_HEADER_PRESENTS:
101+
if (!httpResponse.containsHeader(KEEP_ALIVE)) {
102+
httpResponse.close();
103+
}
104+
break;
105+
case ALWAYS_KEEP_OPEN_AFTER_RESPONSE:
106+
break;
107+
}
97108
} catch (Throwable closableThrowable) {
98109
loggingModule()
99110
.getLogger(HttpCommunicationExecutor.class)

application-http-client/src/main/java/ru/art/http/client/communicator/HttpCommunicator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@
2525
import ru.art.entity.*;
2626
import ru.art.entity.interceptor.*;
2727
import ru.art.entity.mapper.*;
28+
import ru.art.http.client.constants.*;
2829
import ru.art.http.client.handler.*;
2930
import ru.art.http.client.interceptor.*;
3031
import ru.art.http.client.model.*;
3132
import ru.art.http.constants.*;
33+
import static ru.art.http.client.constants.HttpClientModuleConstants.*;
3234
import java.nio.charset.*;
3335
import java.util.*;
3436
import java.util.concurrent.*;
@@ -76,9 +78,7 @@ static HttpCommunicator httpCommunicator(HttpCommunicationTargetConfiguration ta
7678

7779
HttpCommunicator options();
7880

79-
HttpCommunicator considerKeepAliveResponseHeader();
80-
81-
HttpCommunicator ignoreKeepAliveResponseHeader();
81+
HttpCommunicator connectionClosingPolicy(ConnectionClosingPolicy policy);
8282

8383
HttpCommunicator delete();
8484

application-http-client/src/main/java/ru/art/http/client/communicator/HttpCommunicatorImplementation.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
import static ru.art.core.extension.StringExtensions.*;
4444
import static ru.art.core.wrapper.ExceptionWrapper.*;
4545
import static ru.art.http.client.communicator.HttpCommunicationExecutor.*;
46-
import static ru.art.http.client.constants.HttpClientModuleConstants.HttpClientKeepAliveHeaderStrategy.*;
46+
import static ru.art.http.client.constants.HttpClientModuleConstants.*;
4747
import static ru.art.http.client.module.HttpClientModule.*;
4848
import static ru.art.http.constants.HttpMethodType.*;
4949
import static ru.art.logging.LoggingModule.*;
@@ -221,14 +221,8 @@ public HttpCommunicator gzipCompressed() {
221221
}
222222

223223
@Override
224-
public HttpCommunicator ignoreKeepAliveResponseHeader() {
225-
configuration.setKeepAliveResponseHeaderStrategy(IGNORE);
226-
return this;
227-
}
228-
229-
@Override
230-
public HttpCommunicator considerKeepAliveResponseHeader() {
231-
configuration.setKeepAliveResponseHeaderStrategy(CONSIDER);
224+
public HttpCommunicator connectionClosingPolicy(ConnectionClosingPolicy policy) {
225+
configuration.setConnectionClosingPolicy(policy);
232226
return this;
233227
}
234228

application-http-client/src/main/java/ru/art/http/client/constants/HttpClientModuleConstants.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ public interface HttpClientModuleConstants {
2828
int DEFAULT_MAX_CONNECTIONS_PER_ROUTE = 2;
2929
int DEFAULT_MAX_CONNECTIONS_TOTAL = 20;
3030

31-
enum HttpClientKeepAliveHeaderStrategy {
32-
IGNORE,
33-
CONSIDER
31+
enum ConnectionClosingPolicy {
32+
CLOSE_AFTER_RESPONSE,
33+
CLOSE_IF_NOT_KEEP_ALIVE_HEADER_PRESENTS,
34+
ALWAYS_KEEP_OPEN_AFTER_RESPONSE
3435
}
3536
}

application-http/src/main/java/ru/art/http/constants/HttpHeaders.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,4 +379,6 @@ public interface HttpHeaders {
379379
* @see <a href="http://tools.ietf.org/html/rfc7235#section-4.1">Section 4.1 of RFC 7235</a>
380380
*/
381381
String WWW_AUTHENTICATE = "WWW-Authenticate";
382+
383+
String KEEP_ALIVE = "Keep-Alive";
382384
}

application-soap-client/src/main/java/ru/art/soap/client/communicator/SoapCommunicationConfiguration.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,16 @@
2626
import ru.art.entity.*;
2727
import ru.art.entity.interceptor.*;
2828
import ru.art.entity.mapper.*;
29+
import ru.art.http.client.constants.*;
30+
import ru.art.http.client.constants.HttpClientModuleConstants.*;
2931
import ru.art.http.client.handler.*;
3032
import ru.art.http.client.interceptor.*;
3133
import ru.art.soap.client.exception.*;
3234
import ru.art.soap.content.mapper.*;
3335
import static lombok.AccessLevel.*;
3436
import static ru.art.core.checker.CheckerForEmptiness.*;
3537
import static ru.art.core.factory.CollectionsFactory.*;
38+
import static ru.art.http.client.constants.HttpClientModuleConstants.ConnectionClosingPolicy.CLOSE_AFTER_RESPONSE;
3639
import static ru.art.http.client.module.HttpClientModule.*;
3740
import static ru.art.soap.client.constants.SoapClientModuleConstants.*;
3841
import static ru.art.soap.client.constants.SoapClientModuleConstants.OperationIdSource.*;
@@ -71,6 +74,7 @@ class SoapCommunicationConfiguration {
7174
private List<ValueInterceptor<XmlEntity, XmlEntity>> requestValueInterceptors = linkedListOf();
7275
private List<ValueInterceptor<XmlEntity, XmlEntity>> responseValueInterceptors = linkedListOf();
7376
private OperationIdSource operationIdSource = REQUEST;
77+
private ConnectionClosingPolicy connectionClosingPolicy = CLOSE_AFTER_RESPONSE;
7478

7579
void validateRequiredFields() {
7680
boolean urlIsEmpty = isEmpty(url);

application-soap-client/src/main/java/ru/art/soap/client/communicator/SoapCommunicationExecutor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ static <RequestType, ResponseType> Optional<ResponseType> execute(SoapCommunicat
4040
configuration.getRequestValueInterceptors().forEach(interceptor -> httpCommunicator.addRequestValueInterceptor(cast(interceptor)));
4141
configuration.getResponseValueInterceptors().forEach(interceptor -> httpCommunicator.addResponseValueInterceptor(cast(interceptor)));
4242
httpCommunicator
43+
.connectionClosingPolicy(configuration.getConnectionClosingPolicy())
4344
.version(configuration.getHttpVersion())
4445
.requestCharset(configuration.getRequestCharset())
4546
.addHeader(ACCEPT, configuration.getConsumesMimeType().getMimeType().toString())
@@ -68,6 +69,7 @@ static <RequestType, ResponseType> CompletableFuture<Optional<ResponseType>> exe
6869
configuration.getRequestValueInterceptors().forEach(interceptor -> httpCommunicator.addRequestValueInterceptor(cast(interceptor)));
6970
configuration.getResponseValueInterceptors().forEach(interceptor -> httpCommunicator.addResponseValueInterceptor(cast(interceptor)));
7071
httpCommunicator
72+
.connectionClosingPolicy(configuration.getConnectionClosingPolicy())
7173
.version(configuration.getHttpVersion())
7274
.requestCharset(configuration.getRequestCharset())
7375
.addHeader(ACCEPT, configuration.getConsumesMimeType().getMimeType().toString())

application-soap-client/src/main/java/ru/art/soap/client/communicator/SoapCommunicator.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,13 @@
2525
import ru.art.entity.*;
2626
import ru.art.entity.interceptor.*;
2727
import ru.art.entity.mapper.*;
28+
import ru.art.http.client.communicator.*;
29+
import ru.art.http.client.constants.*;
2830
import ru.art.http.client.handler.*;
2931
import ru.art.http.client.interceptor.*;
3032
import ru.art.http.client.model.*;
3133
import ru.art.soap.content.mapper.*;
34+
import static ru.art.http.client.constants.HttpClientModuleConstants.*;
3235
import java.nio.charset.*;
3336
import java.util.*;
3437
import java.util.concurrent.*;
@@ -78,6 +81,8 @@ static SoapCommunicator soapCommunicator(HttpCommunicationTargetConfiguration ta
7881

7982
SoapCommunicator useOperationIdFromConfiguration();
8083

84+
SoapCommunicator connectionClosingPolicy(ConnectionClosingPolicy policy);
85+
8186
SoapCommunicator version(HttpVersion httpVersion);
8287

8388
<RequestType, ResponseType> Optional<ResponseType> execute(RequestType request);

application-soap-client/src/main/java/ru/art/soap/client/communicator/SoapCommunicatorImplementation.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import ru.art.entity.*;
2727
import ru.art.entity.interceptor.*;
2828
import ru.art.entity.mapper.*;
29+
import ru.art.http.client.constants.*;
2930
import ru.art.http.client.handler.*;
3031
import ru.art.http.client.interceptor.*;
3132
import ru.art.http.client.model.*;
@@ -181,6 +182,12 @@ public SoapCommunicator useOperationIdFromConfiguration() {
181182
return this;
182183
}
183184

185+
@Override
186+
public SoapCommunicator connectionClosingPolicy(HttpClientModuleConstants.ConnectionClosingPolicy policy) {
187+
configuration.setConnectionClosingPolicy(policy);
188+
return this;
189+
}
190+
184191
@Override
185192
public SoapCommunicator version(HttpVersion httpVersion) {
186193
HttpVersion httpProtocolVersion = getOrElse(httpVersion, httpClientModule().getHttpVersion());

0 commit comments

Comments
 (0)