diff --git a/google-api-client/src/main/java/com/google/api/client/googleapis/json/GoogleJsonError.java b/google-api-client/src/main/java/com/google/api/client/googleapis/json/GoogleJsonError.java index 1a530145a..246c3fd1e 100644 --- a/google-api-client/src/main/java/com/google/api/client/googleapis/json/GoogleJsonError.java +++ b/google-api-client/src/main/java/com/google/api/client/googleapis/json/GoogleJsonError.java @@ -189,6 +189,7 @@ public static class Details { private String type; @Key private String detail; + @Key private String reason; @Key private List parameterViolations; public String getType() { @@ -207,6 +208,14 @@ public void setDetail(String detail) { this.detail = detail; } + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } + public List getParameterViolations() { return parameterViolations; } diff --git a/google-api-client/src/test/java/com/google/api/client/googleapis/json/GoogleJsonErrorTest.java b/google-api-client/src/test/java/com/google/api/client/googleapis/json/GoogleJsonErrorTest.java index 99cc3b1d1..c988804a6 100644 --- a/google-api-client/src/test/java/com/google/api/client/googleapis/json/GoogleJsonErrorTest.java +++ b/google-api-client/src/test/java/com/google/api/client/googleapis/json/GoogleJsonErrorTest.java @@ -125,4 +125,48 @@ public void testParse_withDetails() throws Exception { assertEquals(DETAILS_ERROR, FACTORY.toString(errorResponse)); assertNotNull(errorResponse.getDetails()); } + + public void testParse_withReasonInDetails() throws Exception { + String DETAILS_ERROR = + "{" + + "\"code\":400," + + "\"details\":" + + "[{" + + "\"@type\":\"type.googleapis.com/google.dataflow.v1beta3.InvalidTemplateParameters\"," + + "\"parameterViolations\":[{" + + "\"description\":\"Parameter didn't match regex '^[0-9a-zA-Z_]+$'\"," + + "\"parameter\":\"safeBrowsingApiKey\"" + + "}]," + + "\"reason\":\"TEST REASON 1\"" + + "},{" + + "\"@type\":\"type.googleapis.com/google.rpc.DebugInfo\"," + + "\"detail\":\"test detail\"" + + "},{" + + "\"@type\":\"type.googleapis.com/google.rpc.DebugInfo\"," + + "\"reason\":\"test reason 2\"" + + "},{" + + "\"@type\":\"type.googleapis.com/google.rpc.DebugInfo\"" + + "}]," + + "\"message\":\"The template parameters are invalid.\"," + + "\"status\":\"INVALID_ARGUMENT\"" + + "}"; + InputStream errorContent = + GoogleJsonErrorTest.class.getResourceAsStream("errorWithReasonInDetails.json"); + + HttpTransport transport = + new ErrorTransport( + new MockLowLevelHttpResponse() + .setContent(errorContent) + .setContentType(Json.MEDIA_TYPE) + .setStatusCode(HttpStatusCodes.STATUS_CODE_FORBIDDEN)); + HttpRequest request = + transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL); + request.setThrowExceptionOnExecuteError(false); + HttpResponse response = request.execute(); + com.google.api.client.googleapis.json.GoogleJsonError errorResponse = + com.google.api.client.googleapis.json.GoogleJsonError.parse(FACTORY, response); + + assertEquals(DETAILS_ERROR, FACTORY.toString(errorResponse)); + assertNotNull(errorResponse.getDetails().get(2).getReason()); + } } diff --git a/google-api-client/src/test/resources/com/google/api/client/googleapis/json/errorWithReasonInDetails.json b/google-api-client/src/test/resources/com/google/api/client/googleapis/json/errorWithReasonInDetails.json new file mode 100644 index 000000000..cd1b85ad5 --- /dev/null +++ b/google-api-client/src/test/resources/com/google/api/client/googleapis/json/errorWithReasonInDetails.json @@ -0,0 +1,31 @@ +{ + "error": { + "code": 400, + "message": "The template parameters are invalid.", + "status": "INVALID_ARGUMENT", + "details": [ + { + "@type": "type.googleapis.com/google.dataflow.v1beta3.InvalidTemplateParameters", + "reason": "TEST REASON 1", + "parameterViolations": [ + { + "parameter": "safeBrowsingApiKey", + "description": "Parameter didn't match regex '^[0-9a-zA-Z_]+$'" + } + ] + }, + { + "@type": "type.googleapis.com/google.rpc.DebugInfo", + "detail": "test detail" + }, + { + "@type": "type.googleapis.com/google.rpc.DebugInfo", + "reason": "test reason 2" + }, + { + "@type": "type.googleapis.com/google.rpc.DebugInfo" + } + ] + } +} + diff --git a/pom.xml b/pom.xml index ebc61ac00..5e1201517 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ pom Parent for the Google API Client Library for Java The Google APIs Client Library for Java is a Java client library - for accessing any HTTP-based API on the web + for accessing any HTTP-based API on the web https://github.com/googleapis/google-api-java-client @@ -17,7 +17,7 @@ 2010 - + chingor