|
39 | 39 | import software.amazon.awssdk.codegen.model.intermediate.OperationModel;
|
40 | 40 | import software.amazon.awssdk.codegen.model.intermediate.Protocol;
|
41 | 41 | import software.amazon.awssdk.codegen.model.intermediate.ShapeModel;
|
| 42 | +import software.amazon.awssdk.codegen.model.intermediate.ShapeType; |
42 | 43 | import software.amazon.awssdk.codegen.poet.PoetExtension;
|
43 | 44 | import software.amazon.awssdk.codegen.poet.auth.scheme.AuthSchemeSpecUtils;
|
44 | 45 | import software.amazon.awssdk.codegen.poet.client.traits.HttpChecksumRequiredTrait;
|
@@ -116,7 +117,6 @@ public MethodSpec initProtocolFactory(IntermediateModel model) {
|
116 | 117 | methodSpec.addCode("$L", hasAwsQueryCompatible());
|
117 | 118 | }
|
118 | 119 |
|
119 |
| - registerModeledExceptions(model, poetExtensions).forEach(methodSpec::addCode); |
120 | 120 | methodSpec.addCode(";");
|
121 | 121 |
|
122 | 122 | return methodSpec.build();
|
@@ -170,11 +170,40 @@ public CodeBlock responseHandler(IntermediateModel model, OperationModel opModel
|
170 | 170 | public Optional<CodeBlock> errorResponseHandler(OperationModel opModel) {
|
171 | 171 | String protocolFactory = protocolFactoryLiteral(model, opModel);
|
172 | 172 |
|
173 |
| - return Optional.of( |
174 |
| - CodeBlock.builder() |
175 |
| - .add("\n\n$T<$T> errorResponseHandler = createErrorResponseHandler($L, operationMetadata);", |
176 |
| - HttpResponseHandler.class, AwsServiceException.class, protocolFactory) |
177 |
| - .build()); |
| 173 | + CodeBlock.Builder builder = CodeBlock.builder(); |
| 174 | + ParameterizedTypeName metadataMapperType = ParameterizedTypeName.get( |
| 175 | + ClassName.get(Function.class), |
| 176 | + ClassName.get(String.class), |
| 177 | + ParameterizedTypeName.get(Optional.class, ExceptionMetadata.class)); |
| 178 | + |
| 179 | + builder.add("\n$T exceptionMetadataMapper = errorCode -> {\n", metadataMapperType); |
| 180 | + builder.add("if (errorCode == null) {\n"); |
| 181 | + builder.add("return $T.empty();\n", Optional.class); |
| 182 | + builder.add("}\n"); |
| 183 | + builder.add("switch (errorCode) {\n"); |
| 184 | + model.getShapes().values().stream() |
| 185 | + .filter(shape -> shape.getShapeType() == ShapeType.Exception) |
| 186 | + .forEach(exceptionShape -> { |
| 187 | + String exceptionName = exceptionShape.getShapeName(); |
| 188 | + String errorCode = exceptionShape.getErrorCode(); |
| 189 | + |
| 190 | + builder.add("case $S:\n", errorCode); |
| 191 | + builder.add("return $T.of($T.builder()\n", Optional.class, ExceptionMetadata.class) |
| 192 | + .add(".errorCode($S)\n", errorCode); |
| 193 | + builder.add(populateHttpStatusCode(exceptionShape, model)); |
| 194 | + builder.add(".exceptionBuilderSupplier($T::builder)\n", |
| 195 | + poetExtensions.getModelClassFromShape(exceptionShape)) |
| 196 | + .add(".build());\n"); |
| 197 | + }); |
| 198 | + |
| 199 | + builder.add("default: return $T.empty();\n", Optional.class); |
| 200 | + builder.add("}\n"); |
| 201 | + builder.add("};\n"); |
| 202 | + |
| 203 | + builder.add("$T<$T> errorResponseHandler = createErrorResponseHandler($L, operationMetadata, exceptionMetadataMapper);", |
| 204 | + HttpResponseHandler.class, AwsServiceException.class, protocolFactory); |
| 205 | + |
| 206 | + return Optional.of(builder.build()); |
178 | 207 | }
|
179 | 208 |
|
180 | 209 | @Override
|
@@ -411,21 +440,6 @@ public Optional<MethodSpec> createErrorResponseHandler() {
|
411 | 440 | ClassName httpResponseHandler = ClassName.get(HttpResponseHandler.class);
|
412 | 441 | ClassName sdkBaseException = ClassName.get(AwsServiceException.class);
|
413 | 442 | TypeName responseHandlerOfException = ParameterizedTypeName.get(httpResponseHandler, sdkBaseException);
|
414 |
| - |
415 |
| - return Optional.of(MethodSpec.methodBuilder("createErrorResponseHandler") |
416 |
| - .addParameter(BaseAwsJsonProtocolFactory.class, "protocolFactory") |
417 |
| - .addParameter(JsonOperationMetadata.class, "operationMetadata") |
418 |
| - .returns(responseHandlerOfException) |
419 |
| - .addModifiers(Modifier.PRIVATE) |
420 |
| - .addStatement("return protocolFactory.createErrorResponseHandler(operationMetadata)") |
421 |
| - .build()); |
422 |
| - } |
423 |
| - |
424 |
| - @Override |
425 |
| - public Optional<MethodSpec> createEventstreamErrorResponseHandler() { |
426 |
| - ClassName httpResponseHandler = ClassName.get(HttpResponseHandler.class); |
427 |
| - ClassName sdkBaseException = ClassName.get(AwsServiceException.class); |
428 |
| - TypeName responseHandlerOfException = ParameterizedTypeName.get(httpResponseHandler, sdkBaseException); |
429 | 443 | ParameterizedTypeName mapperType = ParameterizedTypeName.get(ClassName.get(Function.class),
|
430 | 444 | ClassName.get(String.class), ParameterizedTypeName.get(Optional.class, ExceptionMetadata.class));
|
431 | 445 |
|
|
0 commit comments