|
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