Skip to content

Commit 9d5a235

Browse files
Throw argument validation exceptions immediately instead of deferring.
1 parent 747aee0 commit 9d5a235

File tree

1 file changed

+22
-41
lines changed

1 file changed

+22
-41
lines changed

src/main/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedAsyncClient.java

Lines changed: 22 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,14 @@
5151

5252
/**
5353
* Amazon SQS Extended Async Client extends the functionality of Amazon Async SQS
54-
* client. All service calls made using this client are asynchronous, and will return
54+
* client.
55+
*
56+
* <p>
57+
* All service calls made using this client are asynchronous, and will return
5558
* immediately with a {@link CompletableFuture} that completes when the operation
56-
* completes or when an exception is thrown.
59+
* completes or when an exception is thrown. Argument validation exceptions are thrown
60+
* immediately, and not through the future.
61+
* </p>
5762
*
5863
* <p>
5964
* The Amazon SQS extended client enables sending and receiving large messages
@@ -85,7 +90,9 @@ public class AmazonSQSExtendedAsyncClient extends AmazonSQSExtendedAsyncClientBa
8590
* <p>
8691
* All service calls made using this client are asynchronous, and will return
8792
* immediately with a {@link CompletableFuture} that completes when the operation
88-
* completes or when an exception is thrown.
93+
* completes or when an exception is thrown. Argument validation exceptions are thrown
94+
* immediately, and not through the future.
95+
* </p>
8996
*
9097
* @param sqsClient
9198
* The Amazon SQS async client to use to connect to Amazon SQS.
@@ -102,7 +109,9 @@ public AmazonSQSExtendedAsyncClient(SqsAsyncClient sqsClient) {
102109
* <p>
103110
* All service calls made using this client are asynchronous, and will return
104111
* immediately with a {@link CompletableFuture} that completes when the operation
105-
* completes or when an exception is thrown.
112+
* completes or when an exception is thrown. Argument validation exceptions are thrown
113+
* immediately, and not through the future.
114+
* </p>
106115
*
107116
* @param sqsClient
108117
* The Amazon SQS async client to use to connect to Amazon SQS.
@@ -130,9 +139,7 @@ public CompletableFuture<SendMessageResponse> sendMessage(SendMessageRequest sen
130139
if (sendMessageRequest == null) {
131140
String errorMessage = "sendMessageRequest cannot be null.";
132141
LOG.error(errorMessage);
133-
CompletableFuture<SendMessageResponse> futureEx = new CompletableFuture<>();
134-
futureEx.completeExceptionally(SdkClientException.create(errorMessage));
135-
return futureEx;
142+
throw SdkClientException.create(errorMessage);
136143
}
137144

138145
SendMessageRequest.Builder sendMessageRequestBuilder = sendMessageRequest.toBuilder();
@@ -145,19 +152,11 @@ public CompletableFuture<SendMessageResponse> sendMessage(SendMessageRequest sen
145152
if (StringUtils.isEmpty(sendMessageRequest.messageBody())) {
146153
String errorMessage = "messageBody cannot be null or empty.";
147154
LOG.error(errorMessage);
148-
CompletableFuture<SendMessageResponse> futureEx = new CompletableFuture<>();
149-
futureEx.completeExceptionally(SdkClientException.create(errorMessage));
150-
return futureEx;
155+
throw SdkClientException.create(errorMessage);
151156
}
152157

153158
//Check message attributes for ExtendedClient related constraints
154-
try {
155-
checkMessageAttributes(clientConfiguration.getPayloadSizeThreshold(), sendMessageRequest.messageAttributes());
156-
} catch (SdkClientException e) {
157-
CompletableFuture<SendMessageResponse> futureEx = new CompletableFuture<>();
158-
futureEx.completeExceptionally(e);
159-
return futureEx;
160-
}
159+
checkMessageAttributes(clientConfiguration.getPayloadSizeThreshold(), sendMessageRequest.messageAttributes());
161160

162161
if (clientConfiguration.isAlwaysThroughS3()
163162
|| isLarge(clientConfiguration.getPayloadSizeThreshold(), sendMessageRequest)) {
@@ -178,10 +177,7 @@ public CompletableFuture<ReceiveMessageResponse> receiveMessage(ReceiveMessageRe
178177
if (receiveMessageRequest == null) {
179178
String errorMessage = "receiveMessageRequest cannot be null.";
180179
LOG.error(errorMessage);
181-
182-
CompletableFuture<ReceiveMessageResponse> future = new CompletableFuture<>();
183-
future.completeExceptionally(SdkClientException.create(errorMessage));
184-
return future;
180+
throw SdkClientException.create(errorMessage);
185181
}
186182

187183
ReceiveMessageRequest.Builder receiveMessageRequestBuilder = receiveMessageRequest.toBuilder();
@@ -266,10 +262,7 @@ public CompletableFuture<DeleteMessageResponse> deleteMessage(DeleteMessageReque
266262
if (deleteMessageRequest == null) {
267263
String errorMessage = "deleteMessageRequest cannot be null.";
268264
LOG.error(errorMessage);
269-
270-
CompletableFuture<DeleteMessageResponse> future = new CompletableFuture<>();
271-
future.completeExceptionally(SdkClientException.create(errorMessage));
272-
return future;
265+
throw SdkClientException.create(errorMessage);
273266
}
274267

275268
DeleteMessageRequest.Builder deleteMessageRequestBuilder = deleteMessageRequest.toBuilder();
@@ -332,9 +325,7 @@ public CompletableFuture<SendMessageBatchResponse> sendMessageBatch(
332325
if (sendMessageBatchRequestIn == null) {
333326
String errorMessage = "sendMessageBatchRequest cannot be null.";
334327
LOG.error(errorMessage);
335-
CompletableFuture<SendMessageBatchResponse> futureEx = new CompletableFuture<>();
336-
futureEx.completeExceptionally(SdkClientException.create(errorMessage));
337-
return futureEx;
328+
throw SdkClientException.create(errorMessage);
338329
}
339330

340331
SendMessageBatchRequest.Builder sendMessageBatchRequestBuilder = sendMessageBatchRequestIn.toBuilder();
@@ -350,13 +341,7 @@ public CompletableFuture<SendMessageBatchResponse> sendMessageBatch(
350341
boolean hasS3Entries = false;
351342
for (SendMessageBatchRequestEntry entry : sendMessageBatchRequest.entries()) {
352343
//Check message attributes for ExtendedClient related constraints
353-
try {
354-
checkMessageAttributes(clientConfiguration.getPayloadSizeThreshold(), entry.messageAttributes());
355-
} catch (SdkClientException e) {
356-
CompletableFuture<SendMessageBatchResponse> futureEx = new CompletableFuture<>();
357-
futureEx.completeExceptionally(e);
358-
return futureEx;
359-
}
344+
checkMessageAttributes(clientConfiguration.getPayloadSizeThreshold(), entry.messageAttributes());
360345

361346
if (clientConfiguration.isAlwaysThroughS3()
362347
|| isLarge(clientConfiguration.getPayloadSizeThreshold(), entry)) {
@@ -394,9 +379,7 @@ public CompletableFuture<DeleteMessageBatchResponse> deleteMessageBatch(
394379
if (deleteMessageBatchRequest == null) {
395380
String errorMessage = "deleteMessageBatchRequest cannot be null.";
396381
LOG.error(errorMessage);
397-
CompletableFuture<DeleteMessageBatchResponse> futureEx = new CompletableFuture<>();
398-
futureEx.completeExceptionally(SdkClientException.create(errorMessage));
399-
return futureEx;
382+
throw SdkClientException.create(errorMessage);
400383
}
401384

402385
DeleteMessageBatchRequest.Builder deleteMessageBatchRequestBuilder = deleteMessageBatchRequest.toBuilder();
@@ -460,9 +443,7 @@ public CompletableFuture<PurgeQueueResponse> purgeQueue(PurgeQueueRequest purgeQ
460443
if (purgeQueueRequest == null) {
461444
String errorMessage = "purgeQueueRequest cannot be null.";
462445
LOG.error(errorMessage);
463-
CompletableFuture<PurgeQueueResponse> futureEx = new CompletableFuture<>();
464-
futureEx.completeExceptionally(SdkClientException.create(errorMessage));
465-
return futureEx;
446+
throw SdkClientException.create(errorMessage);
466447
}
467448

468449
PurgeQueueRequest.Builder purgeQueueRequestBuilder = purgeQueueRequest.toBuilder();

0 commit comments

Comments
 (0)