diff --git a/.nvmrc b/.nvmrc index 13f4d2c5..1a2f5bd2 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v24.13.0 \ No newline at end of file +lts/* \ No newline at end of file diff --git a/async/async-commons/src/main/java/org/reactivecommons/async/commons/converters/json/DefaultObjectMapperSupplier.java b/async/async-commons/src/main/java/org/reactivecommons/async/commons/converters/json/DefaultObjectMapperSupplier.java index aacd4fc6..34697bb7 100644 --- a/async/async-commons/src/main/java/org/reactivecommons/async/commons/converters/json/DefaultObjectMapperSupplier.java +++ b/async/async-commons/src/main/java/org/reactivecommons/async/commons/converters/json/DefaultObjectMapperSupplier.java @@ -1,13 +1,12 @@ package org.reactivecommons.async.commons.converters.json; import io.cloudevents.jackson.JsonFormat; -import tools.jackson.databind.ObjectMapper; import tools.jackson.databind.json.JsonMapper; public class DefaultObjectMapperSupplier implements ObjectMapperSupplier { @Override - public ObjectMapper get() { + public JsonMapper get() { return JsonMapper.builder() .addModule(JsonFormat.getCloudEventJacksonModule()) .findAndAddModules() diff --git a/async/async-commons/src/main/java/org/reactivecommons/async/commons/converters/json/JacksonMessageConverter.java b/async/async-commons/src/main/java/org/reactivecommons/async/commons/converters/json/JacksonMessageConverter.java index c2922669..befba4eb 100644 --- a/async/async-commons/src/main/java/org/reactivecommons/async/commons/converters/json/JacksonMessageConverter.java +++ b/async/async-commons/src/main/java/org/reactivecommons/async/commons/converters/json/JacksonMessageConverter.java @@ -10,7 +10,7 @@ import org.reactivecommons.async.commons.converters.MessageConverter; import org.reactivecommons.async.commons.exceptions.MessageConversionException; import tools.jackson.databind.JsonNode; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; @RequiredArgsConstructor public abstract class JacksonMessageConverter implements MessageConverter { @@ -19,26 +19,26 @@ public abstract class JacksonMessageConverter implements MessageConverter { public static final String APPLICATION_CLOUD_EVENT_JSON = "application/cloudevents+json"; public static final String APPLICATION_JSON = "application/json"; - protected final ObjectMapper objectMapper; + protected final JsonMapper jsonMapper; @Override public AsyncQuery readAsyncQuery(Message message, Class bodyClass) { final AsyncQueryJson asyncQueryJson = readValue(message, AsyncQueryJson.class); - final T value = objectMapper.treeToValue(asyncQueryJson.getQueryData(), bodyClass); + final T value = jsonMapper.treeToValue(asyncQueryJson.getQueryData(), bodyClass); return new AsyncQuery<>(asyncQueryJson.getResource(), value); } @Override public DomainEvent readDomainEvent(Message message, Class bodyClass) { final DomainEventJson domainEventJson = readValue(message, DomainEventJson.class); - final T value = objectMapper.treeToValue(domainEventJson.getData(), bodyClass); + final T value = jsonMapper.treeToValue(domainEventJson.getData(), bodyClass); return new DomainEvent<>(domainEventJson.getName(), domainEventJson.getEventId(), value); } @Override public Command readCommand(Message message, Class bodyClass) { final CommandJson commandJson = readValue(message, CommandJson.class); - final T value = objectMapper.treeToValue(commandJson.getData(), bodyClass); + final T value = jsonMapper.treeToValue(commandJson.getData(), bodyClass); return new Command<>(commandJson.getName(), commandJson.getCommandId(), value); } @@ -50,7 +50,7 @@ public CloudEvent readCloudEvent(Message message) { @Override public T readValue(Message message, Class valueClass) { try { - return objectMapper.readValue(message.getBody(), valueClass); + return jsonMapper.readValue(message.getBody(), valueClass); } catch (Exception e) { throw new MessageConversionException(FAILED_TO_CONVERT_MESSAGE_CONTENT, e); } diff --git a/async/async-commons/src/main/java/org/reactivecommons/async/commons/converters/json/ObjectMapperSupplier.java b/async/async-commons/src/main/java/org/reactivecommons/async/commons/converters/json/ObjectMapperSupplier.java index bf3e27c4..aceaca64 100644 --- a/async/async-commons/src/main/java/org/reactivecommons/async/commons/converters/json/ObjectMapperSupplier.java +++ b/async/async-commons/src/main/java/org/reactivecommons/async/commons/converters/json/ObjectMapperSupplier.java @@ -1,8 +1,8 @@ package org.reactivecommons.async.commons.converters.json; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import java.util.function.Supplier; -public interface ObjectMapperSupplier extends Supplier { +public interface ObjectMapperSupplier extends Supplier { } diff --git a/async/async-commons/src/test/java/org/reactivecommons/async/commons/converters/json/DefaultObjectMapperSupplierTest.java b/async/async-commons/src/test/java/org/reactivecommons/async/commons/converters/json/DefaultObjectMapperSupplierTest.java index 2668c4d7..5235d74d 100644 --- a/async/async-commons/src/test/java/org/reactivecommons/async/commons/converters/json/DefaultObjectMapperSupplierTest.java +++ b/async/async-commons/src/test/java/org/reactivecommons/async/commons/converters/json/DefaultObjectMapperSupplierTest.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.junit.jupiter.api.Test; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import java.time.LocalDateTime; import java.util.Date; @@ -15,30 +15,29 @@ class DefaultObjectMapperSupplierTest { private final DefaultObjectMapperSupplier defaultObjectMapperSupplier = new DefaultObjectMapperSupplier(); - @Test void shouldMapWithUnknownProperties() { - ObjectMapper objectMapper = defaultObjectMapperSupplier.get(); + JsonMapper jsonMapper = defaultObjectMapperSupplier.get(); SampleClassExtra base = new SampleClassExtra("23", "one", new Date(), 45L); - final String serialized = objectMapper.writeValueAsString(base); + final String serialized = jsonMapper.writeValueAsString(base); - final SampleClass result = objectMapper.readValue(serialized, SampleClass.class); + final SampleClass result = jsonMapper.readValue(serialized, SampleClass.class); assertThat(result).usingRecursiveComparison().isEqualTo(base); } @Test void shouldSerializeAndDeserializeLocalDateTime() { - ObjectMapper objectMapper = defaultObjectMapperSupplier.get(); + JsonMapper jsonMapper = defaultObjectMapperSupplier.get(); LocalDateTime now = LocalDateTime.of(2025, 12, 10, 14, 30, 0); SampleClassWithLocalDateTime sample = new SampleClassWithLocalDateTime("123", "Test", now); - final String serialized = objectMapper.writeValueAsString(sample); + final String serialized = jsonMapper.writeValueAsString(sample); assertThat(serialized).contains("2025-12-10"); - final SampleClassWithLocalDateTime result = objectMapper.readValue(serialized, SampleClassWithLocalDateTime.class); + final SampleClassWithLocalDateTime result = jsonMapper.readValue(serialized, SampleClassWithLocalDateTime.class); assertThat(result.getId()).isEqualTo("123"); assertThat(result.getName()).isEqualTo("Test"); diff --git a/async/async-kafka/src/main/java/org/reactivecommons/async/kafka/converters/json/KafkaJacksonMessageConverter.java b/async/async-kafka/src/main/java/org/reactivecommons/async/kafka/converters/json/KafkaJacksonMessageConverter.java index b36644bf..05c47031 100644 --- a/async/async-kafka/src/main/java/org/reactivecommons/async/kafka/converters/json/KafkaJacksonMessageConverter.java +++ b/async/async-kafka/src/main/java/org/reactivecommons/async/kafka/converters/json/KafkaJacksonMessageConverter.java @@ -7,7 +7,7 @@ import org.reactivecommons.async.commons.exceptions.MessageConversionException; import org.reactivecommons.async.kafka.KafkaMessage; import org.reactivecommons.async.kafka.KafkaMessage.KafkaMessageProperties; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import java.nio.charset.StandardCharsets; import java.util.HashMap; @@ -15,8 +15,8 @@ public class KafkaJacksonMessageConverter extends JacksonMessageConverter { - public KafkaJacksonMessageConverter(ObjectMapper objectMapper) { - super(objectMapper); + public KafkaJacksonMessageConverter(JsonMapper jsonMapper) { + super(jsonMapper); } @Override @@ -26,7 +26,7 @@ public Message toMessage(Object object) { } byte[] bytes; try { - String jsonString = this.objectMapper.writeValueAsString(object); + String jsonString = this.jsonMapper.writeValueAsString(object); bytes = jsonString.getBytes(StandardCharsets.UTF_8); } catch (Exception e) { throw new MessageConversionException(FAILED_TO_CONVERT_MESSAGE_CONTENT, e); diff --git a/async/async-kafka/src/test/java/org/reactivecommons/async/kafka/converters/json/KafkaJacksonMessageConverterTest.java b/async/async-kafka/src/test/java/org/reactivecommons/async/kafka/converters/json/KafkaJacksonMessageConverterTest.java index eea67b48..e70bd532 100644 --- a/async/async-kafka/src/test/java/org/reactivecommons/async/kafka/converters/json/KafkaJacksonMessageConverterTest.java +++ b/async/async-kafka/src/test/java/org/reactivecommons/async/kafka/converters/json/KafkaJacksonMessageConverterTest.java @@ -12,7 +12,7 @@ import org.reactivecommons.async.commons.communications.Message; import org.reactivecommons.async.commons.converters.json.DefaultObjectMapperSupplier; import org.reactivecommons.async.commons.converters.json.ObjectMapperSupplier; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import java.net.URI; import java.time.OffsetDateTime; @@ -23,13 +23,13 @@ class KafkaJacksonMessageConverterTest { private static KafkaJacksonMessageConverter converter; - private static ObjectMapper objectMapper; + private static JsonMapper jsonMapper; @BeforeAll static void setUp() { ObjectMapperSupplier supplier = new DefaultObjectMapperSupplier(); - objectMapper = supplier.get(); - converter = new KafkaJacksonMessageConverter(objectMapper); + jsonMapper = supplier.get(); + converter = new KafkaJacksonMessageConverter(jsonMapper); } @Test @@ -61,21 +61,21 @@ void shouldSerializeCloudEvent() { .withType("test") .withDataContentType("application/json") .withTime(dateTime) - .withData(objectMapper.writeValueAsBytes(event)) + .withData(jsonMapper.writeValueAsBytes(event)) .build(); String expectedJson = "{\"specversion\":\"1.0\",\"id\":\"" + id + "\",\"source\":\"https://reactivecommons.org/events\",\"type\":\"test\"," + "\"datacontenttype\":\"application/json\",\"time\":\"" + dateTime + "\",\"data\":{\"name\":\"name\",\"age\":1}}"; - JsonCloudEvent expectedJsonNode = objectMapper.readValue(expectedJson, JsonCloudEvent.class); + JsonCloudEvent expectedJsonNode = jsonMapper.readValue(expectedJson, JsonCloudEvent.class); // Act Message message = converter.toMessage(testCloudEvent); // Assert assertEquals("test", message.getProperties().getTopic()); assertEquals(id, message.getProperties().getKey()); assertEquals("application/cloudevents+json", message.getProperties().getContentType()); - JsonCloudEvent receivedJsonNode = objectMapper.readValue(new String(message.getBody()), JsonCloudEvent.class); + JsonCloudEvent receivedJsonNode = jsonMapper.readValue(new String(message.getBody()), JsonCloudEvent.class); assertEquals(expectedJsonNode, receivedJsonNode); } diff --git a/async/async-rabbit/src/main/java/org/reactivecommons/async/rabbit/converters/json/RabbitJacksonMessageConverter.java b/async/async-rabbit/src/main/java/org/reactivecommons/async/rabbit/converters/json/RabbitJacksonMessageConverter.java index 8b0e55aa..831415ac 100644 --- a/async/async-rabbit/src/main/java/org/reactivecommons/async/rabbit/converters/json/RabbitJacksonMessageConverter.java +++ b/async/async-rabbit/src/main/java/org/reactivecommons/async/rabbit/converters/json/RabbitJacksonMessageConverter.java @@ -4,14 +4,14 @@ import org.reactivecommons.async.commons.communications.Message; import org.reactivecommons.async.commons.converters.json.JacksonMessageConverter; import org.reactivecommons.async.rabbit.RabbitMessage; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import java.nio.charset.StandardCharsets; public class RabbitJacksonMessageConverter extends JacksonMessageConverter { - public RabbitJacksonMessageConverter(ObjectMapper objectMapper) { - super(objectMapper); + public RabbitJacksonMessageConverter(JsonMapper jsonMapper) { + super(jsonMapper); } @Override @@ -20,7 +20,7 @@ public Message toMessage(Object object) { return rabbitMessage; } byte[] bytes; - String jsonString = this.objectMapper.writeValueAsString(object); + String jsonString = this.jsonMapper.writeValueAsString(object); bytes = jsonString.getBytes(StandardCharsets.UTF_8); RabbitMessage.RabbitMessageProperties props = new RabbitMessage.RabbitMessageProperties(); if (object instanceof CloudEvent) { diff --git a/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/RabbitDirectAsyncGatewayTest.java b/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/RabbitDirectAsyncGatewayTest.java index 08d0602a..9e47011d 100644 --- a/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/RabbitDirectAsyncGatewayTest.java +++ b/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/RabbitDirectAsyncGatewayTest.java @@ -28,7 +28,7 @@ import reactor.rabbitmq.SendOptions; import reactor.rabbitmq.Sender; import reactor.test.StepVerifier; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import java.time.Duration; import java.util.List; @@ -326,7 +326,7 @@ private void senderMock() { private void mockReply() { Message message = mock(Message.class); - ObjectMapper mapper = new ObjectMapper(); + JsonMapper mapper = new JsonMapper(); when(message.getBody()).thenReturn(mapper.writeValueAsString(new DummyMessage()).getBytes()); final Sinks.One processor = Sinks.one(); processor.tryEmitValue(message); diff --git a/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/communications/ReactiveMessageSenderTest.java b/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/communications/ReactiveMessageSenderTest.java index 513c3e78..7745d471 100644 --- a/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/communications/ReactiveMessageSenderTest.java +++ b/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/communications/ReactiveMessageSenderTest.java @@ -33,13 +33,13 @@ class ReactiveMessageSenderTest { private ReactiveMessageSender messageSender; - private final JsonMapper objectMapper = new JsonMapper(); + private final JsonMapper jsonMapper = new JsonMapper(); @Mock private Sender sender; @Spy - private final MessageConverter messageConverter = new RabbitJacksonMessageConverter(objectMapper); + private final MessageConverter messageConverter = new RabbitJacksonMessageConverter(jsonMapper); @Mock private final SendOptions sendOptions = new SendOptions(); @@ -56,7 +56,7 @@ void init() { }); when(sender.send(any(Publisher.class))).then(invocation -> { final Flux argument = invocation.getArgument(0); - argument.subscribe(); // Suscribirse para inicializar el sink + argument.subscribe(); // Subscribe to initialize the sink return Mono.empty(); }); String sourceApplication = "TestApp"; diff --git a/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/converters/json/JacksonMessageConverterTest.java b/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/converters/json/JacksonMessageConverterTest.java index cca0827a..5c4a7d4b 100644 --- a/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/converters/json/JacksonMessageConverterTest.java +++ b/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/converters/json/JacksonMessageConverterTest.java @@ -11,7 +11,7 @@ import org.reactivecommons.async.commons.communications.Message; import org.reactivecommons.async.commons.converters.json.DefaultObjectMapperSupplier; import tools.jackson.databind.JsonNode; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import java.net.URI; import java.util.Date; @@ -23,12 +23,12 @@ class JacksonMessageConverterTest { private static RabbitJacksonMessageConverter converter; - private static ObjectMapper objectMapper; + private static JsonMapper jsonMapper; @BeforeAll static void setUp() { - objectMapper = new DefaultObjectMapperSupplier().get(); - converter = new RabbitJacksonMessageConverter(objectMapper); + jsonMapper = new DefaultObjectMapperSupplier().get(); + converter = new RabbitJacksonMessageConverter(jsonMapper); } @Test @@ -42,7 +42,7 @@ void toMessage() { void toMessageWhenDataIsNull() { final Message message = converter.toMessage(null); - final JsonNode jsonNode = objectMapper.readTree(message.getBody()); + final JsonNode jsonNode = jsonMapper.readTree(message.getBody()); assertThat(jsonNode.isNull()).isTrue(); } @@ -50,7 +50,7 @@ void toMessageWhenDataIsNull() { void toMessageWhenDataIsEmpty() { final Message message = converter.toMessage(""); - final JsonNode jsonNode = objectMapper.readTree(message.getBody()); + final JsonNode jsonNode = jsonMapper.readTree(message.getBody()); assertThat(jsonNode.asString()).isEmpty(); } @@ -71,7 +71,7 @@ void readCloudEvent() { .withSource(URI.create("https://spring.io/foos"))// .withType("command") .withData("application/json", JsonCloudEventData.wrap( - objectMapper.valueToTree(new SampleClass("35", "name1", date))) + jsonMapper.valueToTree(new SampleClass("35", "name1", date))) ) .build(); Message message = converter.toMessage(command); diff --git a/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/listeners/ListenerReporterTestSuperClass.java b/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/listeners/ListenerReporterTestSuperClass.java index 3d810949..08d2644d 100644 --- a/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/listeners/ListenerReporterTestSuperClass.java +++ b/async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/listeners/ListenerReporterTestSuperClass.java @@ -29,7 +29,7 @@ import reactor.rabbitmq.ExchangeSpecification; import reactor.rabbitmq.Receiver; import tools.jackson.core.JacksonException; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import java.util.ArrayList; import java.util.Collections; @@ -65,7 +65,7 @@ public abstract class ListenerReporterTestSuperClass { protected final CustomReporter errorReporter = mock(CustomReporter.class); protected final Semaphore semaphore = new Semaphore(0); protected final Semaphore successSemaphore = new Semaphore(0); - private final ObjectMapper mapper = new DefaultObjectMapperSupplier().get(); + private final JsonMapper mapper = new DefaultObjectMapperSupplier().get(); private final Receiver receiver = mock(Receiver.class); protected final ReactiveMessageListener reactiveMessageListener = new ReactiveMessageListener( receiver, topologyCreator diff --git a/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/CloudEventSerializer.java b/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/CloudEventSerializer.java index 0513dc7f..a5109bd3 100644 --- a/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/CloudEventSerializer.java +++ b/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/CloudEventSerializer.java @@ -91,7 +91,7 @@ public void serialize(CloudEvent value, JsonGenerator gen, SerializationContext if (value.getData() != null) { CloudEventData data = value.getData(); if (data instanceof JsonCloudEventData jsonCloudEventData) { - gen.writePOJOProperty("data", jsonCloudEventData.getNode()); + gen.writePOJOProperty("data", jsonCloudEventData.node()); } else { byte[] dataBytes = data.toBytes(); String contentType = value.getDataContentType(); @@ -100,10 +100,8 @@ public void serialize(CloudEvent value, JsonGenerator gen, SerializationContext gen.writeName("data_base64"); gen.writeBinary(dataBytes); } else if (JsonFormat.dataIsJsonContentType(contentType)) { - // TODO really bad b/c it allocates stuff, is there another solution out there? - char[] dataAsString = new String(dataBytes, StandardCharsets.UTF_8).toCharArray(); gen.writeName("data"); - gen.writeRawValue(dataAsString, 0, dataAsString.length); + gen.writeRawValue(new String(dataBytes, StandardCharsets.UTF_8)); } else { gen.writeName("data"); gen.writeUTF8String(dataBytes, 0, dataBytes.length); diff --git a/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/JsonCloudEventData.java b/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/JsonCloudEventData.java index 208e6540..79d60e12 100644 --- a/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/JsonCloudEventData.java +++ b/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/JsonCloudEventData.java @@ -25,42 +25,24 @@ /** * This class is a wrapper for Jackson {@link JsonNode} implementing {@link CloudEventData}. */ -public class JsonCloudEventData implements CloudEventData { - - private final JsonNode node; - - /** - * @param node the json node to wrap - * @deprecated You should use {@link #wrap(JsonNode)} - */ - public JsonCloudEventData(JsonNode node) { - Objects.requireNonNull(node); - this.node = node; - } +public record JsonCloudEventData(JsonNode node) implements CloudEventData { @Override public byte[] toBytes() { return node.toString().getBytes(StandardCharsets.UTF_8); } - /** - * @return the wrapped {@link JsonNode} - */ - public JsonNode getNode() { - return node; - } - @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; JsonCloudEventData that = (JsonCloudEventData) o; - return Objects.equals(getNode(), that.getNode()); + return Objects.equals(node(), that.node()); } @Override public int hashCode() { - return Objects.hash(getNode()); + return Objects.hash(node()); } @Override diff --git a/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/JsonFormat.java b/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/JsonFormat.java index 0d30e19f..b832a485 100644 --- a/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/JsonFormat.java +++ b/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/JsonFormat.java @@ -25,7 +25,6 @@ import io.cloudevents.rw.CloudEventDataMapper; import io.cloudevents.rw.CloudEventRWException; import tools.jackson.core.JacksonException; -import tools.jackson.databind.ObjectMapper; import tools.jackson.databind.json.JsonMapper; import tools.jackson.databind.module.SimpleModule; @@ -36,7 +35,7 @@ * using Jackson. This format is resolvable with {@link io.cloudevents.core.provider.EventFormatProvider} using the content type {@link #CONTENT_TYPE}. *

* If you want to use the {@link CloudEvent} serializers/deserializers directly in your mapper, you can use {@link #getCloudEventJacksonModule()} or - * {@link #getCloudEventJacksonModule(boolean, boolean)} to get a {@link SimpleModule} to register in your {@link ObjectMapper} instance. + * {@link #getCloudEventJacksonModule(boolean, boolean)} to get a {@link SimpleModule} to register in your {@link JsonMapper} instance. */ public final class JsonFormat implements EventFormat { @@ -47,8 +46,8 @@ public final class JsonFormat implements EventFormat { /** * JSON Data Content Type Discriminator */ - private static final Pattern JSON_CONTENT_TYPE_PATTERN = Pattern.compile("^(application|text)\\/([a-zA-Z]+\\+)?json(;.*)*$"); - private final ObjectMapper mapper; + private static final Pattern JSON_CONTENT_TYPE_PATTERN = Pattern.compile("^(application|text)/([a-zA-Z]+\\+)?json(;.*)*$"); + private final JsonMapper mapper; private final JsonFormatOptions options; /** diff --git a/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/JsonFormatOptions.java b/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/JsonFormatOptions.java index 6ba777ff..8b409791 100644 --- a/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/JsonFormatOptions.java +++ b/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/JsonFormatOptions.java @@ -16,10 +16,16 @@ */ package io.cloudevents.jackson; +import lombok.Getter; + public final class JsonFormatOptions { + @Getter private final boolean forceDataBase64Serialization; + @Getter private final boolean forceStringSerialization; + @Getter private final boolean forceExtensionNameLowerCaseDeserialization; + @Getter private final boolean forceIgnoreInvalidExtensionNameDeserialization; private final boolean disableDataContentTypeDefaulting; @@ -48,24 +54,10 @@ public static JsonFormatOptionsBuilder builder() { return new JsonFormatOptionsBuilder(); } - public boolean isForceDataBase64Serialization() { - return this.forceDataBase64Serialization; - } - - public boolean isForceStringSerialization() { - return this.forceStringSerialization; - } - - public boolean isForceExtensionNameLowerCaseDeserialization() { - return this.forceExtensionNameLowerCaseDeserialization; - } - - public boolean isForceIgnoreInvalidExtensionNameDeserialization() { - return this.forceIgnoreInvalidExtensionNameDeserialization; + public boolean isDataContentTypeDefaultingDisabled() { + return this.disableDataContentTypeDefaulting; } - public boolean isDataContentTypeDefaultingDisabled() { return this.disableDataContentTypeDefaulting; } - public static class JsonFormatOptionsBuilder { private boolean forceDataBase64Serialization = false; private boolean forceStringSerialization = false; diff --git a/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/PojoCloudEventDataMapper.java b/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/PojoCloudEventDataMapper.java index 65c4923c..b2b6d896 100644 --- a/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/PojoCloudEventDataMapper.java +++ b/async/cloudevents-json-jackson/src/main/java/io/cloudevents/jackson/PojoCloudEventDataMapper.java @@ -7,21 +7,21 @@ import tools.jackson.core.type.TypeReference; import tools.jackson.databind.JavaType; import tools.jackson.databind.JsonNode; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import java.util.List; /** - * This class implements a {@link CloudEventDataMapper} that maps any input {@link CloudEventData} to the specified target type using the Jackson {@link ObjectMapper}. + * This class implements a {@link CloudEventDataMapper} that maps any input {@link CloudEventData} to the specified target type using the Jackson {@link JsonMapper}. * * @param the target type of the conversion */ public class PojoCloudEventDataMapper implements CloudEventDataMapper> { - private final ObjectMapper mapper; + private final JsonMapper mapper; private final JavaType target; - private PojoCloudEventDataMapper(ObjectMapper mapper, JavaType target) { + private PojoCloudEventDataMapper(JsonMapper mapper, JavaType target) { this.mapper = mapper; this.target = target; } @@ -29,8 +29,8 @@ private PojoCloudEventDataMapper(ObjectMapper mapper, JavaType target) { @Override public PojoCloudEventData map(CloudEventData data) throws CloudEventRWException { // Best case, event is already from json - if (data instanceof JsonCloudEventData) { - JsonNode node = ((JsonCloudEventData) data).getNode(); + if (data instanceof JsonCloudEventData jsonCloudEventData) { + JsonNode node = (jsonCloudEventData).node(); T value; try { value = this.mapper.convertValue(node, target); @@ -53,37 +53,37 @@ public PojoCloudEventData map(CloudEventData data) throws CloudEventRWExcepti /** * Creates a {@link PojoCloudEventDataMapper} mapping {@link CloudEventData} into {@link PojoCloudEventData}<T> - * using a Jackson {@link ObjectMapper}. + * using a Jackson {@link JsonMapper}. * *

* When working with generic types (e.g. {@link List}<{@link String}>), - * it's better to use {@link PojoCloudEventDataMapper#from(ObjectMapper, TypeReference)}. + * it's better to use {@link PojoCloudEventDataMapper#from(JsonMapper, TypeReference)}. *

* - * @param mapper {@link ObjectMapper} used for POJO deserialization + * @param mapper {@link JsonMapper} used for POJO deserialization * @param target target type as {@link Class}<T> * @param POJO Type * @return {@link CloudEventDataMapper} */ - public static PojoCloudEventDataMapper from(ObjectMapper mapper, Class target) { + public static PojoCloudEventDataMapper from(JsonMapper mapper, Class target) { return new PojoCloudEventDataMapper<>(mapper, mapper.getTypeFactory().constructType(target)); } /** * Creates a {@link PojoCloudEventDataMapper} mapping {@link CloudEventData} into {@link PojoCloudEventData}<T> - * using a Jackson {@link ObjectMapper}. + * using a Jackson {@link JsonMapper}. * *

* This overload is more suitable for mapping generic objects (e.g. {@link List}<{@link String}>), - * as opposed to {@link PojoCloudEventDataMapper#from(ObjectMapper, Class)}. + * as opposed to {@link PojoCloudEventDataMapper#from(JsonMapper, Class)}. *

* - * @param mapper {@link ObjectMapper} used for POJO deserialization + * @param mapper {@link JsonMapper} used for POJO deserialization * @param target target type as {@link TypeReference}<T> * @param POJO Type * @return {@link CloudEventDataMapper} */ - public static PojoCloudEventDataMapper from(ObjectMapper mapper, TypeReference target) { + public static PojoCloudEventDataMapper from(JsonMapper mapper, TypeReference target) { return new PojoCloudEventDataMapper<>(mapper, mapper.getTypeFactory().constructType(target)); } diff --git a/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/CloudEventDeserializerTest.java b/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/CloudEventDeserializerTest.java index 486d3b4b..33e8b43f 100644 --- a/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/CloudEventDeserializerTest.java +++ b/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/CloudEventDeserializerTest.java @@ -2,7 +2,6 @@ import io.cloudevents.CloudEvent; import org.junit.jupiter.api.Test; -import tools.jackson.databind.ObjectMapper; import tools.jackson.databind.json.JsonMapper; import tools.jackson.databind.module.SimpleModule; @@ -37,7 +36,7 @@ class CloudEventDeserializerTest { @Test void impliedDataContentTypeNonBinaryData() { - ObjectMapper mapper = getObjectMapper(false); + JsonMapper mapper = getObjectMapper(false); StringReader reader = new StringReader(NON_BINARY_PAYLOAD); CloudEvent ce = mapper.readValue(reader, CloudEvent.class); assertThat(ce.getDataContentType()).isEqualTo("application/json"); @@ -50,13 +49,13 @@ void impliedDataContentTypeNonBinaryData() { @Test void impliedDataContentTypeBinaryData() { - final ObjectMapper mapper = getObjectMapper(false); + final JsonMapper mapper = getObjectMapper(false); StringReader reader = new StringReader(BINARY_PAYLOAD); CloudEvent ce = mapper.readValue(reader, CloudEvent.class); assertThat(ce.getDataContentType()).isNull(); } - private static ObjectMapper getObjectMapper(boolean disableDataContentTypeDefaulting) { + private static JsonMapper getObjectMapper(boolean disableDataContentTypeDefaulting) { final SimpleModule module = getCloudEventJacksonModule( JsonFormatOptions .builder() diff --git a/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/JsonCloudEventDataTest.java b/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/JsonCloudEventDataTest.java index f8200389..fd86858b 100644 --- a/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/JsonCloudEventDataTest.java +++ b/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/JsonCloudEventDataTest.java @@ -48,16 +48,16 @@ void testMapper(String contentType) { .deserialize(serialized, data -> { assertThat(data) .isInstanceOf(JsonCloudEventData.class); - assertThat(((JsonCloudEventData) data).getNode().isInt()) + assertThat(((JsonCloudEventData) data).node().isInt()) .isTrue(); - return new MyCloudEventData(((JsonCloudEventData) data).getNode().asInt()); + return new MyCloudEventData(((JsonCloudEventData) data).node().asInt()); }); assertThat(deserialized.getDataContentType()) .isEqualTo(contentType); assertThat(deserialized.getData()) .isInstanceOf(MyCloudEventData.class); - assertThat(((MyCloudEventData) deserialized.getData()).getValue()) + assertThat(((MyCloudEventData) deserialized.getData()).value()) .isEqualTo(10); } diff --git a/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/JsonFormatTest.java b/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/JsonFormatTest.java index 181d27fe..35e925b3 100644 --- a/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/JsonFormatTest.java +++ b/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/JsonFormatTest.java @@ -27,8 +27,8 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import tools.jackson.databind.JsonNode; -import tools.jackson.databind.ObjectMapper; import tools.jackson.databind.exc.MismatchedInputException; +import tools.jackson.databind.json.JsonMapper; import tools.jackson.databind.node.JsonNodeFactory; import java.io.IOException; @@ -54,7 +54,7 @@ class JsonFormatTest { - private final ObjectMapper mapper = new ObjectMapper(); + private final JsonMapper mapper = new JsonMapper(); @ParameterizedTest @MethodSource("jsonContentTypes") diff --git a/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/MyPojo.java b/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/MyPojo.java index 7e050a96..0fec7b72 100644 --- a/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/MyPojo.java +++ b/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/MyPojo.java @@ -1,27 +1,21 @@ package io.cloudevents.jackson; +import lombok.Getter; +import lombok.NoArgsConstructor; + import java.util.Objects; +@Getter +@NoArgsConstructor public class MyPojo { public int a; public String b; - public MyPojo() { - } - public MyPojo(int a, String b) { this.a = a; this.b = b; } - public int getA() { - return a; - } - - public void setA(int a) { - this.a = a; - } - @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/data/PojoCloudEventDataMapperTest.java b/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/data/PojoCloudEventDataMapperTest.java index 517ee383..5b4a3642 100644 --- a/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/data/PojoCloudEventDataMapperTest.java +++ b/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/data/PojoCloudEventDataMapperTest.java @@ -12,7 +12,7 @@ import org.junit.jupiter.params.provider.MethodSource; import tools.jackson.core.type.TypeReference; import tools.jackson.databind.JsonNode; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import tools.jackson.databind.node.JsonNodeFactory; import java.nio.charset.StandardCharsets; @@ -63,11 +63,11 @@ void testWithJson(PojoCloudEventDataMapper mapper) { } private static Stream getPojoMappers() { - final ObjectMapper objectMapper = new ObjectMapper(); + final JsonMapper jsonMapper = new JsonMapper(); return Stream.of( - Arguments.of(PojoCloudEventDataMapper.from(objectMapper, new TypeReference() { + Arguments.of(PojoCloudEventDataMapper.from(jsonMapper, new TypeReference() { })), - Arguments.of(PojoCloudEventDataMapper.from(objectMapper, MyPojo.class)) + Arguments.of(PojoCloudEventDataMapper.from(jsonMapper, MyPojo.class)) ); } diff --git a/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/mock/MyCloudEventData.java b/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/mock/MyCloudEventData.java index 2f4b8c08..7af106c7 100644 --- a/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/mock/MyCloudEventData.java +++ b/async/cloudevents-json-jackson/src/test/java/io/cloudevents/jackson/mock/MyCloudEventData.java @@ -5,38 +5,28 @@ import java.nio.charset.StandardCharsets; import java.util.Objects; -public class MyCloudEventData implements CloudEventData { - - private final int value; - - public MyCloudEventData(int value) { - this.value = value; - } +public record MyCloudEventData(int value) implements CloudEventData { @Override public byte[] toBytes() { return Integer.toString(value).getBytes(StandardCharsets.UTF_8); } - public int getValue() { - return value; - } - @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; MyCloudEventData that = (MyCloudEventData) o; - return getValue() == that.getValue(); + return value() == that.value(); } @Override public int hashCode() { - return Objects.hash(getValue()); + return Objects.hash(value()); } public static MyCloudEventData fromStringBytes(byte[] bytes) { - return new MyCloudEventData(Integer.valueOf(new String(bytes))); + return new MyCloudEventData(Integer.parseInt(new String(bytes))); } } diff --git a/build.gradle b/build.gradle index 87c73465..0e1a8333 100644 --- a/build.gradle +++ b/build.gradle @@ -13,9 +13,9 @@ buildscript { plugins { id 'jacoco' id 'org.sonarqube' version '7.2.2.6593' - id 'org.springframework.boot' version '4.0.3' apply false + id 'org.springframework.boot' version '4.0.4' apply false id 'io.github.gradle-nexus.publish-plugin' version '2.0.0' - id 'co.com.bancolombia.cleanArchitecture' version '4.1.1' + id 'co.com.bancolombia.cleanArchitecture' version '4.3.0' } repositories { diff --git a/docs/.nvmrc b/docs/.nvmrc index 13f4d2c5..1a2f5bd2 100644 --- a/docs/.nvmrc +++ b/docs/.nvmrc @@ -1 +1 @@ -v24.13.0 \ No newline at end of file +lts/* \ No newline at end of file diff --git a/docs/docs/reactive-commons/1-getting-started.md b/docs/docs/reactive-commons/1-getting-started.md index c2a3af6c..bd6baff5 100644 --- a/docs/docs/reactive-commons/1-getting-started.md +++ b/docs/docs/reactive-commons/1-getting-started.md @@ -149,42 +149,46 @@ Start a Kafka broker on your local machine with all the defaults (e.g. port is 9 You can run it with Docker or Podman. -The following docker compose has a Kafka broker, a Zookeeper and a Kafka UI. +The following docker compose has a Kafka broker and a Kafka UI. docker-compose.yml ```yaml services: - zookeeper: - image: confluentinc/cp-zookeeper:7.4.1 - environment: - ZOOKEEPER_CLIENT_PORT: 2181 - ZOOKEEPER_TICK_TIME: 2000 - ports: - - "2181:2181" - kafka: - image: confluentinc/cp-kafka:7.4.1 + image: apache/kafka-native + container_name: kafka + ports: + - "9092:9092" environment: - KAFKA_BROKER_ID: 1 - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT + # Configure listeners for both docker and host communication + KAFKA_LISTENERS: CONTROLLER://localhost:9091,HOST://0.0.0.0:9092,DOCKER://0.0.0.0:9093 + KAFKA_ADVERTISED_LISTENERS: HOST://localhost:9092,DOCKER://kafka:9093 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,HOST:PLAINTEXT,DOCKER:PLAINTEXT + + # Settings required for KRaft mode + KAFKA_NODE_ID: 1 + KAFKA_PROCESS_ROLES: broker,controller + KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER + KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9091 + + # Listener to use for broker-to-broker communication + KAFKA_INTER_BROKER_LISTENER_NAME: DOCKER + + # Required for a single node cluster KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 - KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 - ports: - - "9092:9092" - depends_on: - - zookeeper + KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 + KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 kafka-ui: - image: provectuslabs/kafka-ui:latest + image: ghcr.io/kafbat/kafka-ui + container_name: kafka-ui + ports: + - 8090:8080 environment: + DYNAMIC_CONFIG_ENABLED: "true" KAFKA_CLUSTERS_0_NAME: local - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092 - KAFKA_CLUSTERS_0_ZOOKEEPER: zookeeper:2181 - ports: - - "8081:8080" + KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9093 depends_on: - kafka ``` diff --git a/docs/docs/reactive-commons/11-creating-a-cloud-event.md b/docs/docs/reactive-commons/11-creating-a-cloud-event.md index e10f27b7..ff6702fb 100644 --- a/docs/docs/reactive-commons/11-creating-a-cloud-event.md +++ b/docs/docs/reactive-commons/11-creating-a-cloud-event.md @@ -63,11 +63,11 @@ add this classes: import io.cloudevents.core.builder.CloudEventBuilder; import io.cloudevents.CloudEvent; import io.cloudevents.jackson.JsonCloudEventData; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; ``` ```java -ObjectMapper mapper = new ObjectMapper(); // You should convert your object to a JsonNode +JsonMapper mapper = new JsonMapper(); // You should convert your object to a JsonNode CloudEvent commandCloudEvent = CloudEventBuilder.v1() .withId(UUID.randomUUID().toString()) diff --git a/docs/docs/reactive-commons/configuration_properties/1-rabbitmq.md b/docs/docs/reactive-commons/configuration_properties/1-rabbitmq.md index a420d0e6..b6d553fc 100644 --- a/docs/docs/reactive-commons/configuration_properties/1-rabbitmq.md +++ b/docs/docs/reactive-commons/configuration_properties/1-rabbitmq.md @@ -455,21 +455,21 @@ import reactor.rabbitmq.OutboundMessage; import reactor.rabbitmq.OutboundMessageResult; import tools.jackson.core.type.TypeReference; import tools.jackson.databind.JsonNode; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; @Component @EnableDirectAsyncGateway public class ResendUnroutableMessageHandler implements UnroutableMessageHandler { - private final ObjectMapper objectMapper; + private final JsonMapper jsonMapper; private final String retryQueueName; private final DirectAsyncGateway gateway; public ResendUnroutableMessageHandler( - ObjectMapper objectMapper, + JsonMapper jsonMapper, DirectAsyncGateway gateway, @Value("${adapters.rabbitmq.retry-queue-name}") String retryQueueName) { - this.objectMapper = objectMapper; + this.jsonMapper = jsonMapper; this.retryQueueName = retryQueueName; this.gateway = gateway; } @@ -488,7 +488,7 @@ public class ResendUnroutableMessageHandler implements UnroutableMessageHandler try { // The unroutable message is a command, so the message body is deserialized to the Command class. // Use the DomainEvent class for domain events and the AsyncQuery class for asynchronous queries. - Command command = objectMapper.readValue(returned.getBody(), new TypeReference<>() { + Command command = jsonMapper.readValue(returned.getBody(), new TypeReference<>() { }); // Send the message to the queue diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index f8e1ee31..d997cfc6 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index dbc3ce4a..c61a118f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index adff685a..739907df 100755 --- a/gradlew +++ b/gradlew @@ -57,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/2d6327017519d23b96af35865dc997fcb544fb40/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. diff --git a/main.gradle b/main.gradle index 219cb30b..75310037 100644 --- a/main.gradle +++ b/main.gradle @@ -65,17 +65,6 @@ subprojects { testAnnotationProcessor 'org.projectlombok:lombok' testCompileOnly 'org.projectlombok:lombok' - configurations.configureEach { - resolutionStrategy.eachDependency { DependencyResolveDetails details -> - if (details.requested.group == 'tools.jackson.core') { - details.useVersion '3.1.0' - } - if (details.requested.group == 'com.fasterxml.jackson.core' - && details.requested.name == 'jackson-annotations') { - details.useVersion '2.21' - } - } - } } //TODO: Remove once it has been updated in spring boot @@ -102,7 +91,7 @@ subprojects { dependencyManagement { imports { - mavenBom 'org.springframework.boot:spring-boot-dependencies:4.0.3' + mavenBom 'org.springframework.boot:spring-boot-dependencies:4.0.4' } } @@ -198,6 +187,6 @@ tasks.register('generateMergedReport', JacocoReport) { } tasks.named('wrapper') { - gradleVersion = '9.4.0' + gradleVersion = '9.4.1' validateDistributionUrl = true } \ No newline at end of file diff --git a/starters/async-commons-starter/src/main/java/org/reactivecommons/async/starter/config/ReactiveCommonsConfig.java b/starters/async-commons-starter/src/main/java/org/reactivecommons/async/starter/config/ReactiveCommonsConfig.java index 7de4edd4..5c95e5b1 100644 --- a/starters/async-commons-starter/src/main/java/org/reactivecommons/async/starter/config/ReactiveCommonsConfig.java +++ b/starters/async-commons-starter/src/main/java/org/reactivecommons/async/starter/config/ReactiveCommonsConfig.java @@ -22,7 +22,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import java.util.Map; @@ -75,7 +75,7 @@ public ObjectMapperSupplier objectMapperSupplier() { @Bean @ConditionalOnMissingBean - public ObjectMapper defaultReactiveCommonsObjectMapper(ObjectMapperSupplier supplier) { + public JsonMapper defaultReactiveCommonsObjectMapper(ObjectMapperSupplier supplier) { return supplier.get(); } diff --git a/starters/async-rabbit-starter/src/main/java/org/reactivecommons/async/rabbit/RabbitMQSetupUtils.java b/starters/async-rabbit-starter/src/main/java/org/reactivecommons/async/rabbit/RabbitMQSetupUtils.java index 49edb7e9..138a7598 100644 --- a/starters/async-rabbit-starter/src/main/java/org/reactivecommons/async/rabbit/RabbitMQSetupUtils.java +++ b/starters/async-rabbit-starter/src/main/java/org/reactivecommons/async/rabbit/RabbitMQSetupUtils.java @@ -63,7 +63,7 @@ public final class RabbitMQSetupUtils { private static final ConcurrentMap> CONNECTION_CACHE = new ConcurrentHashMap<>(); private static EventLoopGroup createEventLoopGroup() { - log.info("Creating shared Netty EventLoopGroup with default thread configuration for RabbitMQ connections"); + log.debug("Creating shared Netty EventLoopGroup with default thread configuration for RabbitMQ connections"); IoHandlerFactory ioHandlerFactory = NioIoHandler.newFactory(); return new MultiThreadIoEventLoopGroup(ioHandlerFactory); }