1
15
16 package software.amazon.awssdk.protocols.xml;
17
18 import java.util.Optional;
19 import java.util.function.Supplier;
20 import software.amazon.awssdk.annotations.SdkProtectedApi;
21 import software.amazon.awssdk.awscore.AwsResponse;
22 import software.amazon.awssdk.core.Response;
23 import software.amazon.awssdk.core.SdkPojo;
24 import software.amazon.awssdk.core.http.HttpResponseHandler;
25 import software.amazon.awssdk.protocols.query.unmarshall.XmlElement;
26 import software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlPredicatedResponseHandler;
27 import software.amazon.awssdk.protocols.xml.internal.unmarshall.DecorateErrorFromResponseBodyUnmarshaller;
28
29
33 @SdkProtectedApi
34 public final class AwsS3ProtocolFactory extends AwsXmlProtocolFactory {
35 private AwsS3ProtocolFactory(Builder builder) {
36 super(builder);
37 }
38
39
45 @Override
46 Optional<XmlElement> getErrorRoot(XmlElement document) {
47 return Optional.of(document);
48 }
49
50 public static Builder builder() {
51 return new Builder();
52 }
53
54
57 public static final class Builder extends AwsXmlProtocolFactory.Builder<Builder> {
58
59 private Builder() {
60 }
61
62 public AwsS3ProtocolFactory build() {
63 return new AwsS3ProtocolFactory(this);
64 }
65 }
66
67 @Override
68 public <T extends AwsResponse> HttpResponseHandler<Response<T>> createCombinedResponseHandler(
69 Supplier<SdkPojo> pojoSupplier, XmlOperationMetadata staxOperationMetadata) {
70
71 return createErrorCouldBeInBodyResponseHandler(pojoSupplier, staxOperationMetadata);
72 }
73
74 private <T extends AwsResponse> HttpResponseHandler<Response<T>> createErrorCouldBeInBodyResponseHandler(
75 Supplier<SdkPojo> pojoSupplier, XmlOperationMetadata staxOperationMetadata) {
76
77 return new AwsXmlPredicatedResponseHandler<>(r -> pojoSupplier.get(),
78 createResponseTransformer(pojoSupplier),
79 createErrorTransformer(),
80 DecorateErrorFromResponseBodyUnmarshaller.of(this::getErrorRoot),
81 staxOperationMetadata.isHasStreamingSuccessResponse());
82 }
83 }
84