From 8520909b39d81842f419e6d296342368b5384337 Mon Sep 17 00:00:00 2001 From: Ilia Demianenko Date: Wed, 3 Jan 2018 14:00:59 -0800 Subject: [PATCH 1/4] Add innererror property to CloudError --- .../java/com/microsoft/azure/CloudError.java | 14 +++++ .../serializer/CloudErrorDeserializer.java | 3 +- .../azure/CloudErrorDeserializerTests.java | 60 +++++++++++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java diff --git a/azure-client-runtime/src/main/java/com/microsoft/azure/CloudError.java b/azure-client-runtime/src/main/java/com/microsoft/azure/CloudError.java index 05075d81ba..05a0f838f3 100644 --- a/azure-client-runtime/src/main/java/com/microsoft/azure/CloudError.java +++ b/azure-client-runtime/src/main/java/com/microsoft/azure/CloudError.java @@ -6,6 +6,8 @@ package com.microsoft.azure; +import com.fasterxml.jackson.databind.node.ObjectNode; + import java.util.ArrayList; import java.util.List; @@ -33,6 +35,11 @@ public final class CloudError { */ private List details; + /** + * The inner error. + */ + private ObjectNode innererror; + /** * Initializes a new instance of CloudError. */ @@ -100,4 +107,11 @@ public CloudError withTarget(String target) { public List details() { return details; } + + /** + * @return the inner error + */ + public ObjectNode innererror() { + return innererror; + } } diff --git a/azure-client-runtime/src/main/java/com/microsoft/azure/serializer/CloudErrorDeserializer.java b/azure-client-runtime/src/main/java/com/microsoft/azure/serializer/CloudErrorDeserializer.java index a38cf86b41..83f19fb88c 100644 --- a/azure-client-runtime/src/main/java/com/microsoft/azure/serializer/CloudErrorDeserializer.java +++ b/azure-client-runtime/src/main/java/com/microsoft/azure/serializer/CloudErrorDeserializer.java @@ -59,7 +59,8 @@ public CloudError deserialize(JsonParser p, DeserializationContext ctxt) throws nodeContent = nodeContent.replaceFirst("(?i)\"code\"", "\"code\"") .replaceFirst("(?i)\"message\"", "\"message\"") .replaceFirst("(?i)\"target\"", "\"target\"") - .replaceFirst("(?i)\"details\"", "\"details\""); + .replaceFirst("(?i)\"details\"", "\"details\"") + .replaceFirst("(?i)\"innererror\"", "\"innererror\""); JsonParser parser = new JsonFactory().createParser(nodeContent); parser.setCodec(mapper); return parser.readValueAs(CloudError.class); diff --git a/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java b/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java new file mode 100644 index 0000000000..fae1a8cc40 --- /dev/null +++ b/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java @@ -0,0 +1,60 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure; + +import com.microsoft.azure.CloudError; +import com.microsoft.azure.serializer.AzureJacksonAdapter; +import com.microsoft.rest.interceptors.RequestIdHeaderInterceptor; +import com.microsoft.rest.RestClient; +import com.microsoft.rest.retry.RetryHandler; +import okhttp3.Interceptor; +import okhttp3.Protocol; +import okhttp3.Request; +import okhttp3.Response; +import org.junit.Assert; +import org.junit.Test; + +import java.io.IOException; + +public class CloudErrorDeserializerTests { + private static final String REQUEST_ID_HEADER = "x-ms-client-request-id"; + + @Test + public void errorDeserializedFully() throws Exception { + RestClient restClient = new RestClient.Builder() + .withBaseUrl("http://localhost") + .withSerializerAdapter(new AzureJacksonAdapter()) + .withResponseBuilderFactory(new AzureResponseBuilder.Factory()) + .withInterceptor(new RequestIdHeaderInterceptor()) + .build(); + String bodyString = + "{" + + " \"error\": {" + + " \"code\": \"BadArgument\"," + + " \"message\": \"The provided database ‘foo’ has an invalid username.\"," + + " \"target\": \"query\"," + + " \"details\": [" + + " {" + + " \"code\": \"301\"," + + " \"target\": \"$search\"," + + " \"message\": \"$search query option not supported\"" + + " }" + + " ]," + + " \"innererror\": {" + + " \"customKey\": \"customValue\"" + + " }" + + " }" + + "}"; + CloudError cloudError = restClient.serializerAdapter().deserialize(bodyString, CloudError.class); + + Assert.assertEquals("BadArgument", cloudError.code()); + Assert.assertEquals("The provided database ‘foo’ has an invalid username.", cloudError.message()); + Assert.assertEquals("query", cloudError.target()); + Assert.assertEquals("301", cloudError.details().get(0).code()); + Assert.assertEquals("customValue", cloudError.innererror().get("customKey").asText()); + } +} From a70d82e9808020de9d7ceacc1fbe7c1088b78968 Mon Sep 17 00:00:00 2001 From: Ilia Demianenko Date: Wed, 3 Jan 2018 14:03:38 -0800 Subject: [PATCH 2/4] Clean up imports --- .../microsoft/azure/CloudErrorDeserializerTests.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java b/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java index fae1a8cc40..9b70c28cf0 100644 --- a/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java +++ b/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java @@ -6,23 +6,13 @@ package com.microsoft.azure; -import com.microsoft.azure.CloudError; import com.microsoft.azure.serializer.AzureJacksonAdapter; import com.microsoft.rest.interceptors.RequestIdHeaderInterceptor; import com.microsoft.rest.RestClient; -import com.microsoft.rest.retry.RetryHandler; -import okhttp3.Interceptor; -import okhttp3.Protocol; -import okhttp3.Request; -import okhttp3.Response; import org.junit.Assert; import org.junit.Test; -import java.io.IOException; - public class CloudErrorDeserializerTests { - private static final String REQUEST_ID_HEADER = "x-ms-client-request-id"; - @Test public void errorDeserializedFully() throws Exception { RestClient restClient = new RestClient.Builder() From cec68fad6da83a2f4938d1cd3945b7cec96adc6b Mon Sep 17 00:00:00 2001 From: Ilia Demianenko Date: Wed, 3 Jan 2018 14:07:04 -0800 Subject: [PATCH 3/4] Simplify the test --- .../azure/CloudErrorDeserializerTests.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java b/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java index 9b70c28cf0..c38e6c73ea 100644 --- a/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java +++ b/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java @@ -6,21 +6,16 @@ package com.microsoft.azure; +import com.fasterxml.jackson.databind.ObjectMapper; import com.microsoft.azure.serializer.AzureJacksonAdapter; -import com.microsoft.rest.interceptors.RequestIdHeaderInterceptor; -import com.microsoft.rest.RestClient; +import com.microsoft.rest.protocol.SerializerAdapter; import org.junit.Assert; import org.junit.Test; public class CloudErrorDeserializerTests { @Test public void errorDeserializedFully() throws Exception { - RestClient restClient = new RestClient.Builder() - .withBaseUrl("http://localhost") - .withSerializerAdapter(new AzureJacksonAdapter()) - .withResponseBuilderFactory(new AzureResponseBuilder.Factory()) - .withInterceptor(new RequestIdHeaderInterceptor()) - .build(); + SerializerAdapter serializerAdapter = new AzureJacksonAdapter(); String bodyString = "{" + " \"error\": {" + @@ -39,7 +34,7 @@ public void errorDeserializedFully() throws Exception { " }" + " }" + "}"; - CloudError cloudError = restClient.serializerAdapter().deserialize(bodyString, CloudError.class); + CloudError cloudError = serializerAdapter.deserialize(bodyString, CloudError.class); Assert.assertEquals("BadArgument", cloudError.code()); Assert.assertEquals("The provided database ‘foo’ has an invalid username.", cloudError.message()); From ddd76207d24136e824e7081d03ebdf1fe76b1cbc Mon Sep 17 00:00:00 2001 From: Ilia Demianenko Date: Tue, 16 Jan 2018 16:43:42 -0800 Subject: [PATCH 4/4] Camel case inner error --- .../src/main/java/com/microsoft/azure/CloudError.java | 6 +++--- .../microsoft/azure/serializer/CloudErrorDeserializer.java | 2 +- .../com/microsoft/azure/CloudErrorDeserializerTests.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/azure-client-runtime/src/main/java/com/microsoft/azure/CloudError.java b/azure-client-runtime/src/main/java/com/microsoft/azure/CloudError.java index 05a0f838f3..4f2858dd87 100644 --- a/azure-client-runtime/src/main/java/com/microsoft/azure/CloudError.java +++ b/azure-client-runtime/src/main/java/com/microsoft/azure/CloudError.java @@ -38,7 +38,7 @@ public final class CloudError { /** * The inner error. */ - private ObjectNode innererror; + private ObjectNode innerError; /** * Initializes a new instance of CloudError. @@ -111,7 +111,7 @@ public List details() { /** * @return the inner error */ - public ObjectNode innererror() { - return innererror; + public ObjectNode innerError() { + return innerError; } } diff --git a/azure-client-runtime/src/main/java/com/microsoft/azure/serializer/CloudErrorDeserializer.java b/azure-client-runtime/src/main/java/com/microsoft/azure/serializer/CloudErrorDeserializer.java index 83f19fb88c..6d2c03435e 100644 --- a/azure-client-runtime/src/main/java/com/microsoft/azure/serializer/CloudErrorDeserializer.java +++ b/azure-client-runtime/src/main/java/com/microsoft/azure/serializer/CloudErrorDeserializer.java @@ -60,7 +60,7 @@ public CloudError deserialize(JsonParser p, DeserializationContext ctxt) throws .replaceFirst("(?i)\"message\"", "\"message\"") .replaceFirst("(?i)\"target\"", "\"target\"") .replaceFirst("(?i)\"details\"", "\"details\"") - .replaceFirst("(?i)\"innererror\"", "\"innererror\""); + .replaceFirst("(?i)\"innererror\"", "\"innerError\""); JsonParser parser = new JsonFactory().createParser(nodeContent); parser.setCodec(mapper); return parser.readValueAs(CloudError.class); diff --git a/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java b/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java index c38e6c73ea..574a502879 100644 --- a/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java +++ b/azure-client-runtime/src/test/java/com/microsoft/azure/CloudErrorDeserializerTests.java @@ -40,6 +40,6 @@ public void errorDeserializedFully() throws Exception { Assert.assertEquals("The provided database ‘foo’ has an invalid username.", cloudError.message()); Assert.assertEquals("query", cloudError.target()); Assert.assertEquals("301", cloudError.details().get(0).code()); - Assert.assertEquals("customValue", cloudError.innererror().get("customKey").asText()); + Assert.assertEquals("customValue", cloudError.innerError().get("customKey").asText()); } }