18
18
import com .fasterxml .jackson .core .JsonFactory ;
19
19
import java .util .List ;
20
20
import java .util .Map ;
21
+ import java .util .Optional ;
21
22
import java .util .function .Supplier ;
22
23
import software .amazon .awssdk .annotations .SdkInternalApi ;
23
24
import software .amazon .awssdk .awscore .exception .AwsErrorDetails ;
@@ -49,11 +50,11 @@ public final class AwsJsonProtocolErrorUnmarshaller implements HttpResponseHandl
49
50
50
51
private AwsJsonProtocolErrorUnmarshaller (Builder builder ) {
51
52
this .jsonProtocolUnmarshaller = builder .jsonProtocolUnmarshaller ;
52
- this .exceptions = builder .exceptions ;
53
53
this .errorCodeParser = builder .errorCodeParser ;
54
54
this .errorMessageParser = builder .errorMessageParser ;
55
55
this .jsonFactory = builder .jsonFactory ;
56
56
this .defaultExceptionSupplier = builder .defaultExceptionSupplier ;
57
+ this .exceptions = builder .exceptions ;
57
58
}
58
59
59
60
@ Override
@@ -64,12 +65,14 @@ public AwsServiceException handle(SdkHttpFullResponse response, ExecutionAttribu
64
65
private AwsServiceException unmarshall (SdkHttpFullResponse response , ExecutionAttributes executionAttributes ) {
65
66
JsonContent jsonContent = JsonContent .createJsonContent (response , jsonFactory );
66
67
String errorCode = errorCodeParser .parseErrorCode (response , jsonContent );
67
- SdkPojo sdkPojo = exceptions .stream ()
68
- .filter (e -> e .errorCode ().equals (errorCode ))
69
- .map (ExceptionMetadata ::exceptionBuilderSupplier )
70
- .findAny ()
71
- .orElse (defaultExceptionSupplier )
72
- .get ();
68
+
69
+ Optional <ExceptionMetadata > modeledExceptionMetadata = exceptions .stream ()
70
+ .filter (e -> e .errorCode ().equals (errorCode ))
71
+ .findAny ();
72
+
73
+ SdkPojo sdkPojo = modeledExceptionMetadata .map (ExceptionMetadata ::exceptionBuilderSupplier )
74
+ .orElse (defaultExceptionSupplier )
75
+ .get ();
73
76
74
77
AwsServiceException .Builder exception = ((AwsServiceException ) jsonProtocolUnmarshaller
75
78
.unmarshall (sdkPojo , response , jsonContent .getJsonNode ())).toBuilder ();
@@ -78,22 +81,19 @@ private AwsServiceException unmarshall(SdkHttpFullResponse response, ExecutionAt
78
81
errorCode , errorMessage ));
79
82
// Status code and request id are sdk level fields
80
83
exception .message (errorMessage );
81
- exception .statusCode (statusCode (response , errorCode ));
84
+ exception .statusCode (statusCode (response , modeledExceptionMetadata ));
82
85
exception .requestId (getRequestIdFromHeaders (response .headers ()));
83
86
return exception .build ();
84
87
}
85
88
86
- private int statusCode (SdkHttpFullResponse response , String errorCode ) {
89
+ private int statusCode (SdkHttpFullResponse response , Optional < ExceptionMetadata > modeledExceptionMetadata ) {
87
90
if (response .statusCode () != 0 ) {
88
91
return response .statusCode ();
89
92
}
90
93
91
- return exceptions .stream ()
92
- .filter (e -> e .errorCode ().equals (errorCode ))
93
- .filter (e -> e .httpStatusCode () != null )
94
- .map (ExceptionMetadata ::httpStatusCode )
95
- .findAny ()
96
- .orElse (500 );
94
+ return modeledExceptionMetadata .filter (m -> m .httpStatusCode () != null )
95
+ .map (ExceptionMetadata ::httpStatusCode )
96
+ .orElse (500 );
97
97
}
98
98
99
99
/**
0 commit comments