|
35 | 35 | import com.google.gson.JsonElement; |
36 | 36 | import com.google.gson.JsonObject; |
37 | 37 | import com.google.gson.JsonParser; |
| 38 | +import com.google.gson.JsonSyntaxException; |
38 | 39 | import com.google.protobuf.InvalidProtocolBufferException; |
39 | 40 | import com.google.protobuf.TypeRegistry; |
40 | 41 | import com.google.protobuf.util.JsonFormat; |
@@ -94,28 +95,37 @@ static ErrorDetails parseErrorDetails(String errorJson) { |
94 | 95 | return ErrorDetails.builder().build(); |
95 | 96 | } |
96 | 97 |
|
| 98 | + JsonElement jsonElement; |
97 | 99 | try { |
98 | | - JsonObject root = JsonParser.parseString(errorJson).getAsJsonObject(); |
99 | | - if (!root.has("error")) { |
100 | | - return ErrorDetails.builder().build(); |
101 | | - } |
| 100 | + jsonElement = JsonParser.parseString(errorJson); |
| 101 | + } catch (JsonSyntaxException e) { |
| 102 | + return ErrorDetails.builder().build(); |
| 103 | + } |
102 | 104 |
|
103 | | - JsonElement errorElement = root.get("error"); |
104 | | - if (!errorElement.isJsonObject()) { |
105 | | - return ErrorDetails.builder().build(); |
106 | | - } |
| 105 | + if (!jsonElement.isJsonObject()) { |
| 106 | + return ErrorDetails.builder().build(); |
| 107 | + } |
| 108 | + JsonObject root = jsonElement.getAsJsonObject(); |
| 109 | + if (!root.has("error")) { |
| 110 | + return ErrorDetails.builder().build(); |
| 111 | + } |
107 | 112 |
|
108 | | - Status.Builder statusBuilder = Status.newBuilder(); |
109 | | - JSON_PARSER.merge(errorElement.toString(), statusBuilder); |
110 | | - Status status = statusBuilder.build(); |
| 113 | + JsonElement errorElement = root.get("error"); |
| 114 | + if (!errorElement.isJsonObject()) { |
| 115 | + return ErrorDetails.builder().build(); |
| 116 | + } |
111 | 117 |
|
112 | | - ErrorDetails.Builder errorDetailsBuilder = ErrorDetails.builder(); |
113 | | - errorDetailsBuilder.setRawErrorMessages(status.getDetailsList()); |
114 | | - return errorDetailsBuilder.build(); |
| 118 | + Status.Builder statusBuilder = Status.newBuilder(); |
| 119 | + try { |
| 120 | + JSON_PARSER.merge(errorElement.toString(), statusBuilder); |
115 | 121 | } catch (InvalidProtocolBufferException e) { |
116 | | - throw new RuntimeException("Failed to parse Google Cloud error response", e); |
117 | | - } catch (Exception e) { |
118 | | - throw new RuntimeException("Unexpected error during Google Cloud error parsing", e); |
| 122 | + // Return empty details on parsing failure |
| 123 | + return ErrorDetails.builder().build(); |
119 | 124 | } |
| 125 | + |
| 126 | + Status status = statusBuilder.build(); |
| 127 | + ErrorDetails.Builder errorDetailsBuilder = ErrorDetails.builder(); |
| 128 | + errorDetailsBuilder.setRawErrorMessages(status.getDetailsList()); |
| 129 | + return errorDetailsBuilder.build(); |
120 | 130 | } |
121 | 131 | } |
0 commit comments