diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocument.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocument.java index 2fd4f3d7a7f9..7cdb9feff4f1 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocument.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocument.java @@ -7,8 +7,7 @@ import com.azure.core.util.serializer.JacksonAdapter; import com.azure.core.util.serializer.JsonSerializer; import com.azure.core.util.serializer.JsonSerializerProviders; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -20,19 +19,15 @@ /** * Represents a JSON Patch document. */ -//@JsonSerialize(using = JsonPatchDocumentSerializer.class) -public class JsonPatchDocument { +@JsonSerialize(using = JsonPatchDocumentSerializer.class) +public final class JsonPatchDocument { private static final Object SERIALIZER_INSTANTIATION_SYNCHRONIZER = new Object(); private static volatile JsonSerializer defaultSerializer; - @JsonIgnore private final ClientLogger logger = new ClientLogger(JsonPatchDocument.class); - @JsonValue - private final List operations; - - @JsonIgnore private final JsonSerializer serializer; + private final List operations; /** * Creates a new JSON Patch document. @@ -53,7 +48,14 @@ public JsonPatchDocument(JsonSerializer serializer) { this.serializer = serializer; } - List getOperations() { + /** + * Gets a representation of the {@link JsonPatchOperation JSON patch operations} in this JSON patch document. + *

+ * Modifications to the returned list won't mutate the operations in the document. + * + * @return The JSON patch operations in this JSON patch document. + */ + public List getOperations() { return new ArrayList<>(operations); } diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocumentSerializer.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocumentSerializer.java index 31eba6abd7d2..08e0ff8b4a92 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocumentSerializer.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocumentSerializer.java @@ -13,7 +13,7 @@ /** * Handles serialization of a {@link JsonPatchDocument}. */ -class JsonPatchDocumentSerializer extends JsonSerializer { +final class JsonPatchDocumentSerializer extends JsonSerializer { @Override public void serialize(JsonPatchDocument value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperation.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperation.java index cab3bd1528db..f9c6d9d18cf4 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperation.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperation.java @@ -3,6 +3,7 @@ package com.azure.core.util; +import com.azure.core.annotation.Immutable; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Objects; @@ -11,8 +12,9 @@ /** * Represents a JSON Patch operation. */ +@Immutable @JsonSerialize(using = JsonPatchOperationSerializer.class) -final class JsonPatchOperation { +public final class JsonPatchOperation { private final JsonPatchOperationKind op; private final String from; private final String path; @@ -41,7 +43,7 @@ final class JsonPatchOperation { * * @return The kind of operation. */ - JsonPatchOperationKind getOp() { + public JsonPatchOperationKind getOp() { return op; } @@ -50,7 +52,7 @@ JsonPatchOperationKind getOp() { * * @return The operation from target path. */ - String getFrom() { + public String getFrom() { return from; } @@ -59,16 +61,18 @@ String getFrom() { * * @return The operation target path. */ - String getPath() { + public String getPath() { return path; } /** * Gets the operation value. + *

+ * If the operation doesn't take a value {@link Option#uninitialized()} will be returned. * * @return The operation value. */ - Option getValue() { + public Option getValue() { return value; } diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationKind.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationKind.java index 57fe594f7bc5..2520e1f15572 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationKind.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationKind.java @@ -8,7 +8,7 @@ /** * Represents the JSON Patch operation kind. */ -enum JsonPatchOperationKind { +public enum JsonPatchOperationKind { /** * Add operation. */ @@ -45,6 +45,11 @@ enum JsonPatchOperationKind { this.op = op; } + /** + * Gets the string representation of the JSON patch operation kind. + * + * @return The string representation of the JSON patch operation kind. + */ @JsonValue public String toString() { return op; diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationSerializer.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationSerializer.java index acc60d4dee84..38ae5b5439a4 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationSerializer.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationSerializer.java @@ -12,7 +12,7 @@ /** * Handles serialization of a {@link JsonPatchOperation}. */ -class JsonPatchOperationSerializer extends JsonSerializer { +final class JsonPatchOperationSerializer extends JsonSerializer { @Override public void serialize(JsonPatchOperation value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/sdk/core/azure-core/src/test/java/com/azure/core/util/JsonPatchDocumentTests.java b/sdk/core/azure-core/src/test/java/com/azure/core/util/JsonPatchDocumentTests.java index 96e31e26bb4c..e530bd35731e 100644 --- a/sdk/core/azure-core/src/test/java/com/azure/core/util/JsonPatchDocumentTests.java +++ b/sdk/core/azure-core/src/test/java/com/azure/core/util/JsonPatchDocumentTests.java @@ -42,6 +42,13 @@ public void jsonifyDocument(JsonPatchDocument document, String expected) throws assertEquals(expected, SERIALIZER.serialize(document, SerializerEncoding.JSON).replace(" ", "")); } + @ParameterizedTest + @MethodSource("formattingSupplier") + public void jsonifyOperations(JsonPatchDocument document, String expected) throws IOException { + assertEquals(expected, SERIALIZER.serialize(document.getOperations(), SerializerEncoding.JSON) + .replace(" ", "")); + } + private static Stream formattingSupplier() { JsonPatchDocument complexDocument = newDocument() .appendTest("/a/b/c", "foo")