Skip to content

Commit 2f69716

Browse files
committed
Add SdkHttpResponse to SdkResponse so that customers can retrieve HTTP data such as headers and status code from the response object.
1 parent d867703 commit 2f69716

File tree

48 files changed

+481
-513
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+481
-513
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"category": "AWS SDK for Java v2",
3+
"type": "feature",
4+
"description": "Add [SdkHttpResponse](https://github.com/aws/aws-sdk-java-v2/blob/master/http-client-spi/src/main/java/software/amazon/awssdk/http/SdkHttpResponse.java) to [SdkResponse](https://github.com/aws/aws-sdk-java-v2/blob/master/core/src/main/java/software/amazon/awssdk/core/SdkResponse.java) so that customers can retrieve Http data such as headers, status code from the response object."
5+
}

aws-core/src/main/java/software/amazon/awssdk/awscore/AwsResponse.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,25 @@
2323
public abstract class AwsResponse extends SdkResponse {
2424

2525
protected AwsResponse(Builder builder) {
26+
super(builder);
2627
}
2728

2829
@Override
2930
public abstract Builder toBuilder();
3031

3132
protected interface Builder extends SdkResponse.Builder {
33+
3234
@Override
3335
AwsResponse build();
3436
}
3537

36-
protected abstract static class BuilderImpl implements Builder {
38+
protected abstract static class BuilderImpl extends SdkResponse.BuilderImpl implements Builder {
3739

3840
protected BuilderImpl() {
3941
}
4042

4143
protected BuilderImpl(AwsResponse response) {
44+
super(response);
4245
}
4346
}
4447
}

aws-core/src/main/java/software/amazon/awssdk/awscore/http/response/StaxResponseHandler.java

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
import software.amazon.awssdk.annotations.SdkProtectedApi;
2525
import software.amazon.awssdk.awscore.protocol.xml.StaxUnmarshallerContext;
2626
import software.amazon.awssdk.awscore.protocol.xml.VoidStaxUnmarshaller;
27-
import software.amazon.awssdk.core.ResponseMetadata;
27+
import software.amazon.awssdk.core.SdkResponse;
28+
import software.amazon.awssdk.core.SdkResponseMetadata;
2829
import software.amazon.awssdk.core.SdkStandardLoggers;
2930
import software.amazon.awssdk.core.async.AsyncResponseTransformer;
3031
import software.amazon.awssdk.core.http.HttpResponse;
@@ -45,8 +46,8 @@
4546
* @param <T> Indicates the type being unmarshalled by this response handler.
4647
*/
4748
@SdkProtectedApi
48-
@ReviewBeforeRelease("Metadata is currently broken. Revisit when base result types are refactored")
49-
public class StaxResponseHandler<T> implements HttpResponseHandler<T> {
49+
@ReviewBeforeRelease("ResponseMetadata is currently broken. Revisit when base result types are refactored")
50+
public class StaxResponseHandler<T extends SdkResponse> implements HttpResponseHandler<T> {
5051
private static final Logger log = Logger.loggerFor(StaxResponseHandler.class);
5152

5253
/**
@@ -73,7 +74,7 @@ public StaxResponseHandler(Unmarshaller<T, StaxUnmarshallerContext> responseUnma
7374
* don't have to do this check here.
7475
*/
7576
if (this.responseUnmarshaller == null) {
76-
this.responseUnmarshaller = new VoidStaxUnmarshaller<T>();
77+
this.responseUnmarshaller = new VoidStaxUnmarshaller<>();
7778
}
7879
}
7980

@@ -92,8 +93,8 @@ public T handle(HttpResponse response, ExecutionAttributes executionAttributes)
9293

9394
try {
9495
StaxUnmarshallerContext unmarshallerContext = new StaxUnmarshallerContext(eventReader, response.getHeaders());
95-
unmarshallerContext.registerMetadataExpression("ResponseMetadata/RequestId", 2, ResponseMetadata.AWS_REQUEST_ID);
96-
unmarshallerContext.registerMetadataExpression("requestId", 2, ResponseMetadata.AWS_REQUEST_ID);
96+
unmarshallerContext.registerMetadataExpression("ResponseMetadata/RequestId", 2, SdkResponseMetadata.AWS_REQUEST_ID);
97+
unmarshallerContext.registerMetadataExpression("requestId", 2, SdkResponseMetadata.AWS_REQUEST_ID);
9798
registerAdditionalMetadataExpressions(unmarshallerContext);
9899

99100
T result = responseUnmarshaller.unmarshall(unmarshallerContext);
@@ -111,11 +112,11 @@ public T handle(HttpResponse response, ExecutionAttributes executionAttributes)
111112
}
112113

113114
/**
114-
* Create the default {@link ResponseMetadata}. Subclasses may override this to create a
115-
* subclass of {@link ResponseMetadata}. Currently only SimpleDB does this.
115+
* Create the default {@link SdkResponseMetadata}. Subclasses may override this to create a
116+
* subclass of {@link SdkResponseMetadata}. Currently only SimpleDB does this.
116117
*/
117-
protected ResponseMetadata getResponseMetadata(Map<String, String> metadata) {
118-
return new ResponseMetadata(metadata);
118+
protected SdkResponseMetadata getResponseMetadata(Map<String, String> metadata) {
119+
return new SdkResponseMetadata(metadata);
119120
}
120121

121122
/**
@@ -147,7 +148,7 @@ public boolean needsConnectionLeftOpen() {
147148
* @param unmarshaller Unmarshaller for response POJO.
148149
* @param <ResponseT> Response POJO type.
149150
*/
150-
public static <ResponseT> HttpResponseHandler<ResponseT> createStreamingResponseHandler(
151+
public static <ResponseT extends SdkResponse> HttpResponseHandler<ResponseT> createStreamingResponseHandler(
151152
Unmarshaller<ResponseT, StaxUnmarshallerContext> unmarshaller) {
152153
UnsafeFunction<HttpResponse, ResponseT> unmarshallFunction = response -> unmarshallStreaming(unmarshaller, response);
153154
return new HttpResponseHandler<ResponseT>() {
@@ -173,16 +174,16 @@ public boolean needsConnectionLeftOpen() {
173174
* @return Unmarshalled response type.
174175
* @throws Exception if error occurs during unmarshalling.
175176
*/
176-
private static <ResponseT> ResponseT unmarshallStreaming(Unmarshaller<ResponseT, StaxUnmarshallerContext> unmarshaller,
177-
HttpResponse response) throws Exception {
177+
private static <ResponseT extends SdkResponse> ResponseT unmarshallStreaming(Unmarshaller<ResponseT,
178+
StaxUnmarshallerContext> unmarshaller, HttpResponse response) throws Exception {
178179
// Create a dummy event reader to make unmarshallers happy
179180
XMLEventReader eventReader = XmlUtils.xmlInputFactory().createXMLEventReader(
180181
new ByteArrayInputStream("<eof/>".getBytes(StringUtils.UTF8)));
181182

182183
StaxUnmarshallerContext unmarshallerContext = new StaxUnmarshallerContext(eventReader, response.getHeaders());
183-
unmarshallerContext.registerMetadataExpression("ResponseMetadata/RequestId", 2, ResponseMetadata.AWS_REQUEST_ID);
184-
unmarshallerContext.registerMetadataExpression("requestId", 2, ResponseMetadata.AWS_REQUEST_ID);
184+
unmarshallerContext.registerMetadataExpression("ResponseMetadata/RequestId", 2, SdkResponseMetadata.AWS_REQUEST_ID);
185+
unmarshallerContext.registerMetadataExpression("requestId", 2, SdkResponseMetadata.AWS_REQUEST_ID);
186+
185187
return unmarshaller.unmarshall(unmarshallerContext);
186188
}
187-
188189
}

aws-core/src/main/java/software/amazon/awssdk/awscore/protocol/json/AwsJsonProtocolFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import software.amazon.awssdk.annotations.SdkProtectedApi;
2121
import software.amazon.awssdk.annotations.SdkTestInternalApi;
2222
import software.amazon.awssdk.annotations.ThreadSafe;
23+
import software.amazon.awssdk.core.SdkResponse;
2324
import software.amazon.awssdk.core.exception.SdkServiceException;
2425
import software.amazon.awssdk.core.http.HttpResponseHandler;
2526
import software.amazon.awssdk.core.protocol.OperationInfo;
@@ -56,7 +57,7 @@ public AwsJsonProtocolFactory(JsonClientMetadata metadata, AwsJsonProtocolMetada
5657
* @param operationMetadata Additional context information about an operation to create the appropriate response handler.
5758
*/
5859
@Override
59-
public <T> JsonResponseHandler<T> createResponseHandler(
60+
public <T extends SdkResponse> JsonResponseHandler<T> createResponseHandler(
6061
JsonOperationMetadata operationMetadata,
6162
Unmarshaller<T, JsonUnmarshallerContext> responseUnmarshaller) {
6263
return getSdkFactory().createResponseHandler(operationMetadata, responseUnmarshaller);

aws-core/src/main/java/software/amazon/awssdk/awscore/protocol/json/BaseAwsStructuredJsonFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.List;
2020
import java.util.Map;
2121
import software.amazon.awssdk.awscore.http.response.AwsJsonErrorResponseHandler;
22+
import software.amazon.awssdk.core.SdkResponse;
2223
import software.amazon.awssdk.core.protocol.json.JsonOperationMetadata;
2324
import software.amazon.awssdk.core.protocol.json.StructuredJsonGenerator;
2425
import software.amazon.awssdk.core.runtime.http.response.JsonResponseHandler;
@@ -47,7 +48,7 @@ public StructuredJsonGenerator createWriter(String contentType) {
4748
}
4849

4950
@Override
50-
public <T> JsonResponseHandler<T> createResponseHandler(
51+
public <T extends SdkResponse> JsonResponseHandler<T> createResponseHandler(
5152
JsonOperationMetadata operationMetadata,
5253
Unmarshaller<T, JsonUnmarshallerContext> responseUnmarshaller) {
5354
return new JsonResponseHandler(responseUnmarshaller, unmarshallers, jsonFactory,

aws-core/src/test/java/software/amazon/awssdk/awscore/client/handler/AwsAsyncClientHandlerImplTest.java

Lines changed: 0 additions & 165 deletions
This file was deleted.

0 commit comments

Comments
 (0)