From 97720ee31b4152e36303d2506ff1550f8866c289 Mon Sep 17 00:00:00 2001 From: Andrei Alikov Date: Sun, 9 Mar 2025 20:24:27 +0900 Subject: [PATCH 1/7] fixes customizer logic in the GsonGrpcJsonMarshallerBuilder JsonFormat.Parser and JsonFormat.Printer classes are immutable and calling any method in customizer creates new object. Because of that result of the customer is ignored so we need a way to use new object created in the customizer. Replaces Consumer with the Function customizer which returns customized object. --- .../grpc/GsonGrpcJsonMarshallerBuilder.java | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java b/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java index 673b5be0364..abe935bd5f7 100644 --- a/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java +++ b/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java @@ -18,7 +18,7 @@ import static java.util.Objects.requireNonNull; -import java.util.function.Consumer; +import java.util.function.Function; import com.google.protobuf.Message; import com.google.protobuf.util.JsonFormat; @@ -32,23 +32,24 @@ public final class GsonGrpcJsonMarshallerBuilder { @Nullable - private Consumer jsonParserCustomizer; + private Function jsonParserCustomizer; @Nullable - private Consumer jsonPrinterCustomizer; + private Function jsonPrinterCustomizer; GsonGrpcJsonMarshallerBuilder() {} /** - * Adds a {@link Consumer} that can customize the {@link JsonFormat.Parser} + * Adds a {@link Function} that returns customized the {@link JsonFormat.Parser} * used when deserializing a JSON payload into a {@link Message}. */ public GsonGrpcJsonMarshallerBuilder jsonParserCustomizer( - Consumer jsonParserCustomizer) { + Function jsonParserCustomizer) { requireNonNull(jsonParserCustomizer, "jsonParserCustomizer"); if (this.jsonParserCustomizer == null) { @SuppressWarnings("unchecked") - final Consumer cast = (Consumer) jsonParserCustomizer; + final Function cast = + (Function) jsonParserCustomizer; this.jsonParserCustomizer = cast; } else { this.jsonParserCustomizer = this.jsonParserCustomizer.andThen(jsonParserCustomizer); @@ -57,15 +58,16 @@ public GsonGrpcJsonMarshallerBuilder jsonParserCustomizer( } /** - * Adds a {@link Consumer} that can customize the {@link JsonFormat.Printer} + * Adds a {@link Function} that returns customized the {@link JsonFormat.Printer} * used when serializing a {@link Message} into a JSON payload. */ public GsonGrpcJsonMarshallerBuilder jsonPrinterCustomizer( - Consumer jsonPrinterCustomizer) { + Function jsonPrinterCustomizer) { requireNonNull(jsonPrinterCustomizer, "jsonPrinterCustomizer"); if (this.jsonPrinterCustomizer == null) { @SuppressWarnings("unchecked") - final Consumer cast = (Consumer) jsonPrinterCustomizer; + final Function cast = + (Function) jsonPrinterCustomizer; this.jsonPrinterCustomizer = cast; } else { this.jsonPrinterCustomizer = this.jsonPrinterCustomizer.andThen(jsonPrinterCustomizer); @@ -77,14 +79,14 @@ public GsonGrpcJsonMarshallerBuilder jsonPrinterCustomizer( * Returns a newly-created {@link GrpcJsonMarshaller}. */ public GrpcJsonMarshaller build() { - final JsonFormat.Printer printer = JsonFormat.printer().omittingInsignificantWhitespace(); + JsonFormat.Printer printer = JsonFormat.printer().omittingInsignificantWhitespace(); if (jsonPrinterCustomizer != null) { - jsonPrinterCustomizer.accept(printer); + printer = jsonPrinterCustomizer.apply(printer); } - final JsonFormat.Parser parser = JsonFormat.parser().ignoringUnknownFields(); + JsonFormat.Parser parser = JsonFormat.parser().ignoringUnknownFields(); if (jsonParserCustomizer != null) { - jsonParserCustomizer.accept(parser); + parser = jsonParserCustomizer.apply(parser); } return new GsonGrpcJsonMarshaller(printer, parser); } From 43d2c82f57b2d9512194799061a1481ca68beeb5 Mon Sep 17 00:00:00 2001 From: Andrei Alikov Date: Tue, 11 Mar 2025 21:37:32 +0900 Subject: [PATCH 2/7] adds unit tests --- .../GsonGrpcJsonMarshallerBuilderTest.java | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 grpc/src/test/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilderTest.java diff --git a/grpc/src/test/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilderTest.java b/grpc/src/test/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilderTest.java new file mode 100644 index 00000000000..96b139c2bf7 --- /dev/null +++ b/grpc/src/test/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilderTest.java @@ -0,0 +1,101 @@ +package com.linecorp.armeria.common.grpc; + +import com.google.api.client.testing.util.TestableByteArrayOutputStream; +import com.google.protobuf.util.JsonFormat; +import io.grpc.MethodDescriptor; +import org.apache.tools.ant.filters.StringInputStream; +import org.jetbrains.annotations.Nullable; +import org.junit.jupiter.api.Test; +import testing.grpc.Messages; +import testing.grpc.TestServiceGrpc; + +import java.io.IOException; +import java.io.InputStream; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +class GsonGrpcJsonMarshallerBuilderTest { + private static final Messages.SimpleRequest testData = Messages.SimpleRequest.newBuilder() + .setFillUsername(true) + .setPayload( + Messages.Payload.newBuilder() + .setType(Messages.PayloadType.RANDOM) + .build() + ) + .build(); + + private static final MethodDescriptor.Marshaller customRequestMarshaller = + new MethodDescriptor.PrototypeMarshaller() { + @Override + public Class getMessageClass() { + return Messages.SimpleRequest.class; + } + + @Nullable + @Override + public Messages.SimpleRequest getMessagePrototype() { + return Messages.SimpleRequest.getDefaultInstance(); + } + + @Override + public InputStream stream(Messages.SimpleRequest value) { + return TestServiceGrpc.getUnaryCallMethod().getRequestMarshaller().stream(value); + } + + @Override + public Messages.SimpleRequest parse(InputStream stream) { + return TestServiceGrpc.getUnaryCallMethod().getRequestMarshaller().parse(stream); + } + }; + + @Test + void createJsonPrinterWithDefaultSettingsIfNoCustomizerRegistered() throws IOException { + GrpcJsonMarshaller jsonMarshaller = GrpcJsonMarshaller.builderForGson().build(); + String json = serializeToJson(jsonMarshaller); + assertThat(json) + .isEqualTo("{\"payload\":{\"type\":\"RANDOM\"},\"fillUsername\":true}"); + } + + @Test + void createJsonPrinterWithCustomizer() throws IOException { + GrpcJsonMarshaller jsonMarshaller = GrpcJsonMarshaller.builderForGson() + .jsonPrinterCustomizer(JsonFormat.Printer::preservingProtoFieldNames) + .jsonPrinterCustomizer(JsonFormat.Printer::printingEnumsAsInts) + .build(); + String json = serializeToJson(jsonMarshaller); + assertThat(json) + .isEqualTo("{\"payload\":{\"type\":2},\"fill_username\":true}"); + } + + @Test + void createJsonParserWithDefaultSettingsIfNoCustomizerRegistered() throws IOException { + GrpcJsonMarshaller jsonMarshaller = GrpcJsonMarshaller.builderForGson().build(); + assertThat(parseJson(jsonMarshaller, "{\"test\": true,\"fill_username\":true}").getFillUsername()) + .isEqualTo(true); + } + + @Test + void createJsonParserWithCustomizerNotIgnoringUnknownFields() { + GrpcJsonMarshaller jsonMarshaller = GrpcJsonMarshaller.builderForGson() + .jsonParserCustomizer((parser -> parser.usingTypeRegistry( + JsonFormat.TypeRegistry.newBuilder() + .add(Messages.SimpleRequest.getDescriptor()) + .build() + ))) + .jsonParserCustomizer(parser -> JsonFormat.parser()) + .build(); + assertThatThrownBy(() -> parseJson(jsonMarshaller, "{\"test\": true}")) + .hasMessageStartingWith("Cannot find field"); + } + + private static String serializeToJson(GrpcJsonMarshaller jsonMarshaller) throws IOException { + TestableByteArrayOutputStream outputStream = new TestableByteArrayOutputStream(); + jsonMarshaller.serializeMessage(customRequestMarshaller, testData, outputStream); + return outputStream.toString(); + } + + private static Messages.SimpleRequest parseJson(GrpcJsonMarshaller jsonMarshaller, String input) throws IOException { + return jsonMarshaller.deserializeMessage(customRequestMarshaller, new StringInputStream(input)); + } +} From 889e09c2841fb2b1d3acfc70e0af67f784034af7 Mon Sep 17 00:00:00 2001 From: Andrei Alikov Date: Tue, 11 Mar 2025 22:32:57 +0900 Subject: [PATCH 3/7] fixes lint errors --- .../GsonGrpcJsonMarshallerBuilderTest.java | 54 +++++++++++++------ 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/grpc/src/test/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilderTest.java b/grpc/src/test/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilderTest.java index 96b139c2bf7..d59c707ab83 100644 --- a/grpc/src/test/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilderTest.java +++ b/grpc/src/test/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilderTest.java @@ -1,19 +1,37 @@ +/* + * Copyright 2025 LINE Corporation + * + * LINE Corporation licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + package com.linecorp.armeria.common.grpc; -import com.google.api.client.testing.util.TestableByteArrayOutputStream; -import com.google.protobuf.util.JsonFormat; -import io.grpc.MethodDescriptor; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.io.IOException; +import java.io.InputStream; + import org.apache.tools.ant.filters.StringInputStream; import org.jetbrains.annotations.Nullable; import org.junit.jupiter.api.Test; -import testing.grpc.Messages; -import testing.grpc.TestServiceGrpc; -import java.io.IOException; -import java.io.InputStream; +import com.google.api.client.testing.util.TestableByteArrayOutputStream; +import com.google.protobuf.util.JsonFormat; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import io.grpc.MethodDescriptor; +import testing.grpc.Messages; +import testing.grpc.TestServiceGrpc; class GsonGrpcJsonMarshallerBuilderTest { private static final Messages.SimpleRequest testData = Messages.SimpleRequest.newBuilder() @@ -51,33 +69,33 @@ public Messages.SimpleRequest parse(InputStream stream) { @Test void createJsonPrinterWithDefaultSettingsIfNoCustomizerRegistered() throws IOException { - GrpcJsonMarshaller jsonMarshaller = GrpcJsonMarshaller.builderForGson().build(); - String json = serializeToJson(jsonMarshaller); + final GrpcJsonMarshaller jsonMarshaller = GrpcJsonMarshaller.builderForGson().build(); + final String json = serializeToJson(jsonMarshaller); assertThat(json) .isEqualTo("{\"payload\":{\"type\":\"RANDOM\"},\"fillUsername\":true}"); } @Test void createJsonPrinterWithCustomizer() throws IOException { - GrpcJsonMarshaller jsonMarshaller = GrpcJsonMarshaller.builderForGson() + final GrpcJsonMarshaller jsonMarshaller = GrpcJsonMarshaller.builderForGson() .jsonPrinterCustomizer(JsonFormat.Printer::preservingProtoFieldNames) .jsonPrinterCustomizer(JsonFormat.Printer::printingEnumsAsInts) .build(); - String json = serializeToJson(jsonMarshaller); + final String json = serializeToJson(jsonMarshaller); assertThat(json) .isEqualTo("{\"payload\":{\"type\":2},\"fill_username\":true}"); } @Test void createJsonParserWithDefaultSettingsIfNoCustomizerRegistered() throws IOException { - GrpcJsonMarshaller jsonMarshaller = GrpcJsonMarshaller.builderForGson().build(); + final GrpcJsonMarshaller jsonMarshaller = GrpcJsonMarshaller.builderForGson().build(); assertThat(parseJson(jsonMarshaller, "{\"test\": true,\"fill_username\":true}").getFillUsername()) .isEqualTo(true); } @Test void createJsonParserWithCustomizerNotIgnoringUnknownFields() { - GrpcJsonMarshaller jsonMarshaller = GrpcJsonMarshaller.builderForGson() + final GrpcJsonMarshaller jsonMarshaller = GrpcJsonMarshaller.builderForGson() .jsonParserCustomizer((parser -> parser.usingTypeRegistry( JsonFormat.TypeRegistry.newBuilder() .add(Messages.SimpleRequest.getDescriptor()) @@ -90,12 +108,14 @@ void createJsonParserWithCustomizerNotIgnoringUnknownFields() { } private static String serializeToJson(GrpcJsonMarshaller jsonMarshaller) throws IOException { - TestableByteArrayOutputStream outputStream = new TestableByteArrayOutputStream(); + final TestableByteArrayOutputStream outputStream = new TestableByteArrayOutputStream(); jsonMarshaller.serializeMessage(customRequestMarshaller, testData, outputStream); return outputStream.toString(); } - private static Messages.SimpleRequest parseJson(GrpcJsonMarshaller jsonMarshaller, String input) throws IOException { + private static Messages.SimpleRequest parseJson( + GrpcJsonMarshaller jsonMarshaller, String input + ) throws IOException { return jsonMarshaller.deserializeMessage(customRequestMarshaller, new StringInputStream(input)); } } From dd591de1408ac4e4938d4545c96a68ecfa46c14b Mon Sep 17 00:00:00 2001 From: Andrei Alikov Date: Thu, 13 Mar 2025 22:37:29 +0900 Subject: [PATCH 4/7] reverts back original methods and deprecates them --- .../grpc/GsonGrpcJsonMarshallerBuilder.java | 57 +++++++++++++++++++ .../GsonGrpcJsonMarshallerBuilderTest.java | 16 ++++-- 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java b/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java index abe935bd5f7..cf64f632cb7 100644 --- a/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java +++ b/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java @@ -18,6 +18,7 @@ import static java.util.Objects.requireNonNull; +import java.util.function.Consumer; import java.util.function.Function; import com.google.protobuf.Message; @@ -57,6 +58,62 @@ public GsonGrpcJsonMarshallerBuilder jsonParserCustomizer( return this; } + /** + * Adds a {@link Consumer} that can customize the {@link JsonFormat.Parser} + * used when deserializing a JSON payload into a {@link Message}. + * + * @deprecated {@link JsonFormat.Parser} is immutable so all changes applied in the {@link Consumer} + * will be lost. Please use the {@link #jsonParserCustomizer(Function) jsonParserCustomizer} + * which accepts {@link Function} parameter instead. + */ + @Deprecated + public GsonGrpcJsonMarshallerBuilder jsonParserCustomizer( + Consumer jsonParserCustomizer) { + requireNonNull(jsonParserCustomizer, "jsonParserCustomizer"); + if (this.jsonParserCustomizer == null) { + @SuppressWarnings("unchecked") + final Consumer cast = (Consumer) jsonParserCustomizer; + this.jsonParserCustomizer = parser -> { + cast.accept(parser); + return parser; + }; + } else { + this.jsonParserCustomizer = this.jsonParserCustomizer.andThen(parser -> { + jsonParserCustomizer.accept(parser); + return parser; + }); + } + return this; + } + + /** + * Adds a {@link Consumer} that can customize the {@link JsonFormat.Printer} + * used when serializing a {@link Message} into a JSON payload. + * + * @deprecated {@link JsonFormat.Printer} is immutable so all changes applied in the {@link Consumer} + * will be lost. Please use the {@link #jsonPrinterCustomizer(Function) jsonParserCustomizer} + * which accepts {@link Function} parameter instead. + */ + @Deprecated + public GsonGrpcJsonMarshallerBuilder jsonPrinterCustomizer( + Consumer jsonPrinterCustomizer) { + requireNonNull(jsonPrinterCustomizer, "jsonPrinterCustomizer"); + if (this.jsonPrinterCustomizer == null) { + @SuppressWarnings("unchecked") + final Consumer cast = (Consumer) jsonPrinterCustomizer; + this.jsonPrinterCustomizer = printer -> { + cast.accept(printer); + return printer; + }; + } else { + this.jsonPrinterCustomizer = this.jsonPrinterCustomizer.andThen(printer -> { + jsonPrinterCustomizer.accept(printer); + return printer; + }); + } + return this; + } + /** * Adds a {@link Function} that returns customized the {@link JsonFormat.Printer} * used when serializing a {@link Message} into a JSON payload. diff --git a/grpc/src/test/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilderTest.java b/grpc/src/test/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilderTest.java index d59c707ab83..e5e690a8432 100644 --- a/grpc/src/test/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilderTest.java +++ b/grpc/src/test/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilderTest.java @@ -96,12 +96,16 @@ void createJsonParserWithDefaultSettingsIfNoCustomizerRegistered() throws IOExce @Test void createJsonParserWithCustomizerNotIgnoringUnknownFields() { final GrpcJsonMarshaller jsonMarshaller = GrpcJsonMarshaller.builderForGson() - .jsonParserCustomizer((parser -> parser.usingTypeRegistry( - JsonFormat.TypeRegistry.newBuilder() - .add(Messages.SimpleRequest.getDescriptor()) - .build() - ))) - .jsonParserCustomizer(parser -> JsonFormat.parser()) + .jsonParserCustomizer(parser -> { + return parser.usingTypeRegistry( + JsonFormat.TypeRegistry.newBuilder() + .add(Messages.SimpleRequest.getDescriptor()) + .build() + ); + }) + .jsonParserCustomizer(parser -> { + return JsonFormat.parser(); + }) .build(); assertThatThrownBy(() -> parseJson(jsonMarshaller, "{\"test\": true}")) .hasMessageStartingWith("Cannot find field"); From 0812f5a2c828b8f5878b40d2c5a3b6e93a86ddee Mon Sep 17 00:00:00 2001 From: Andrei Alikov Date: Sat, 15 Mar 2025 20:53:32 +0900 Subject: [PATCH 5/7] adds logging for deprecated method --- .../grpc/GsonGrpcJsonMarshallerBuilder.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java b/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java index cf64f632cb7..af824303673 100644 --- a/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java +++ b/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java @@ -21,6 +21,9 @@ import java.util.function.Consumer; import java.util.function.Function; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.google.protobuf.Message; import com.google.protobuf.util.JsonFormat; @@ -31,6 +34,10 @@ * to and from JSON. */ public final class GsonGrpcJsonMarshallerBuilder { + private static final Logger logger = LoggerFactory.getLogger(GsonGrpcJsonMarshallerBuilder.class); + + private static boolean loggedJsonParserCustomizerWarning; + private static boolean loggedJsonPrinterCustomizerWarning; @Nullable private Function jsonParserCustomizer; @@ -69,6 +76,12 @@ public GsonGrpcJsonMarshallerBuilder jsonParserCustomizer( @Deprecated public GsonGrpcJsonMarshallerBuilder jsonParserCustomizer( Consumer jsonParserCustomizer) { + if (!loggedJsonParserCustomizerWarning) { + logger.warn("{}.jsonParserCustomizer(Consumer) does not work as expected, " + + "use jsonParserCustomizer(Function).", + getClass().getSimpleName()); + loggedJsonParserCustomizerWarning = true; + } requireNonNull(jsonParserCustomizer, "jsonParserCustomizer"); if (this.jsonParserCustomizer == null) { @SuppressWarnings("unchecked") @@ -97,6 +110,13 @@ public GsonGrpcJsonMarshallerBuilder jsonParserCustomizer( @Deprecated public GsonGrpcJsonMarshallerBuilder jsonPrinterCustomizer( Consumer jsonPrinterCustomizer) { + if (!loggedJsonPrinterCustomizerWarning) { + logger.warn("{}.jsonPrinterCustomizer(Consumer) does not work as expected," + + "use jsonPrinterCustomizer(Function).", + getClass().getSimpleName()); + loggedJsonPrinterCustomizerWarning = true; + } + requireNonNull(jsonPrinterCustomizer, "jsonPrinterCustomizer"); if (this.jsonPrinterCustomizer == null) { @SuppressWarnings("unchecked") From 7068a0da8bea730e739adf375091a8971a679f05 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Mon, 17 Mar 2025 20:32:40 +0900 Subject: [PATCH 6/7] Update grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java --- .../armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java b/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java index af824303673..c483ad6c1e9 100644 --- a/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java +++ b/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java @@ -111,9 +111,9 @@ public GsonGrpcJsonMarshallerBuilder jsonParserCustomizer( public GsonGrpcJsonMarshallerBuilder jsonPrinterCustomizer( Consumer jsonPrinterCustomizer) { if (!loggedJsonPrinterCustomizerWarning) { - logger.warn("{}.jsonPrinterCustomizer(Consumer) does not work as expected," + - "use jsonPrinterCustomizer(Function).", - getClass().getSimpleName()); + logger.warn("{}.jsonPrinterCustomizer(Consumer) does not work as expected; " + + "use jsonPrinterCustomizer(Function).", + getClass().getSimpleName()); loggedJsonPrinterCustomizerWarning = true; } From a22a0fcefa81da0e0ef8a512d4d42fe564c0092f Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Mon, 17 Mar 2025 20:32:49 +0900 Subject: [PATCH 7/7] Update grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java --- .../armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java b/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java index c483ad6c1e9..ec5e9f45721 100644 --- a/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java +++ b/grpc/src/main/java/com/linecorp/armeria/common/grpc/GsonGrpcJsonMarshallerBuilder.java @@ -78,8 +78,8 @@ public GsonGrpcJsonMarshallerBuilder jsonParserCustomizer( Consumer jsonParserCustomizer) { if (!loggedJsonParserCustomizerWarning) { logger.warn("{}.jsonParserCustomizer(Consumer) does not work as expected, " + - "use jsonParserCustomizer(Function).", - getClass().getSimpleName()); + "use jsonParserCustomizer(Function).", + getClass().getSimpleName()); loggedJsonParserCustomizerWarning = true; } requireNonNull(jsonParserCustomizer, "jsonParserCustomizer");