Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ jobs:
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version-file: 'docs/.nvmrc'
- name: Install dependencies
Expand All @@ -31,7 +31,7 @@ jobs:
run: npm run build
working-directory: docs
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
uses: actions/upload-pages-artifact@v4
with:
path: 'docs/build/'
- name: Deploy to GitHub Pages
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,30 +15,30 @@ jobs:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Verify Conventional Commits
uses: amannn/action-semantic-pull-request@v5
if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set up NodeJS
if: github.ref == 'refs/heads/master'
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version-file: '.nvmrc'
- name: Set up Semantic Release
if: github.ref == 'refs/heads/master'
run: npm -g install @semantic-release/git semantic-release@23.0.0
run: npm -g install @semantic-release/git semantic-release@25.0.2
- name: Semantic Release
if: github.ref == 'refs/heads/master'
run: npx semantic-release@23.0.0
run: npx semantic-release@25.0.2
env:
GITHUB_TOKEN: ${{ secrets.PA_TOKEN }}
- name: Set up JDK 17
uses: actions/setup-java@v3
- name: Set up JDK 25
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 17
java-version: 25
- name: Execute build test jacocoTestReport and sonar analysis
if: endsWith(github.REF, '/master') == true || github.event.pull_request.head.repo.fork == false
env:
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Set env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/v}" >> $GITHUB_ENV
- name: Upgrade Gradle.properties
Expand All @@ -20,11 +20,11 @@ jobs:
issues: true
issuesWoLabels: true
stripGeneratorNotice: true
- name: Set up JDK 17
uses: actions/setup-java@v3
- name: Set up JDK 25
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 17
java-version: 25
- name: Build with Gradle
run: ./gradlew build --refresh-dependencies --no-daemon --continue -Denv.ci=true
- name: Prepare gpg key
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/updater.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
- uses: actions/checkout@v6
- name: Set up JDK 25
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 17
java-version: 25
- name: Check for updates
run: ./gradlew internalTask --action UPDATE_DEPENDENCIES
- name: Check for changes
Expand Down
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v20.11.0
v24.11.1
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class SimpleEventNotificationTest {
private final Long data = ThreadLocalRandom.current().nextLong();

@Test
void shouldReceiveEvent() throws InterruptedException {
void shouldReceiveEvent() {
DomainEvent<?> event = new DomainEvent<>(EVENT_NAME, eventId, data);
Sinks.Many<DomainEvent<Long>> listener = Sinks.many().unicast().onBackpressureBuffer();
from(eventBus.emit(event)).subscribe();
Expand Down
1 change: 0 additions & 1 deletion async/async-commons-api/async-commons-api.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,4 @@ dependencies {
api project(':domain-events-api')
compileOnly 'io.projectreactor:reactor-core'
testImplementation 'io.projectreactor:reactor-test'
implementation 'io.cloudevents:cloudevents-json-jackson:4.0.1'
}
8 changes: 4 additions & 4 deletions async/async-commons/async-commons.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ ext {
dependencies {
api project(':async-commons-api')
api project(':domain-events-api')
api project(':cloudevents-json-jackson')

compileOnly 'io.projectreactor:reactor-core'
api 'com.fasterxml.jackson.core:jackson-databind'
api 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
implementation 'commons-io:commons-io:2.20.0'
implementation 'io.cloudevents:cloudevents-json-jackson:4.0.1'
api 'tools.jackson.core:jackson-databind:3.0.3'
implementation 'commons-io:commons-io:2.21.0'
implementation 'io.cloudevents:cloudevents-core:4.0.1'

testImplementation 'io.projectreactor:reactor-test'
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.reactivecommons.async.commons;

import com.fasterxml.jackson.databind.JsonNode;
import io.cloudevents.CloudEvent;
import io.cloudevents.core.builder.CloudEventBuilder;
import lombok.Data;
Expand All @@ -12,6 +11,7 @@
import org.reactivecommons.async.commons.converters.MessageConverter;
import org.reactivecommons.async.commons.exceptions.MessageConversionException;
import reactor.core.publisher.Mono;
import tools.jackson.databind.JsonNode;

import java.util.logging.Level;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,9 @@ public void addEventListener(RegisteredEventListener<?, ?> listener) {

public void addQueryHandler(RegisteredQueryHandler<?, ?> handler) {
if (handler.path().contains("*") || handler.path().contains("#")) {
throw new RuntimeException("avoid * or # in dynamic handlers, make sure you have no conflicts with cached" +
" patterns");
throw new RuntimeException(
"avoid * or # in dynamic handlers, make sure you have no conflicts with cached patterns"
);
}
queryHandlers.put(handler.path(), handler);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package org.reactivecommons.async.commons.converters.json;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.cloudevents.CloudEvent;
import io.cloudevents.CloudEventData;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import tools.jackson.databind.json.JsonMapper;

import java.util.Objects;

@AllArgsConstructor(access = AccessLevel.PRIVATE)
public final class CloudEventBuilderExt {
private static final ObjectMapper mapper = new ObjectMapper();
private static final JsonMapper mapper = new JsonMapper();

@SneakyThrows
public static byte[] asBytes(Object object) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
package org.reactivecommons.async.commons.converters.json;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
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() {
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.findAndRegisterModules();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.registerModule(JsonFormat.getCloudEventJacksonModule());
return objectMapper;
return JsonMapper.builder()
.addModule(JsonFormat.getCloudEventJacksonModule())
.findAndAddModules()
.build();
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.reactivecommons.async.commons.converters.json;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.cloudevents.CloudEvent;
import lombok.Data;
import lombok.RequiredArgsConstructor;
Expand All @@ -11,8 +9,8 @@
import org.reactivecommons.async.commons.communications.Message;
import org.reactivecommons.async.commons.converters.MessageConverter;
import org.reactivecommons.async.commons.exceptions.MessageConversionException;

import java.io.IOException;
import tools.jackson.databind.JsonNode;
import tools.jackson.databind.ObjectMapper;

@RequiredArgsConstructor
public abstract class JacksonMessageConverter implements MessageConverter {
Expand All @@ -25,35 +23,23 @@ public abstract class JacksonMessageConverter implements MessageConverter {

@Override
public <T> AsyncQuery<T> readAsyncQuery(Message message, Class<T> bodyClass) {
try {
final AsyncQueryJson asyncQueryJson = readValue(message, AsyncQueryJson.class);
final T value = objectMapper.treeToValue(asyncQueryJson.getQueryData(), bodyClass);
return new AsyncQuery<>(asyncQueryJson.getResource(), value);
} catch (IOException e) {
throw new MessageConversionException(FAILED_TO_CONVERT_MESSAGE_CONTENT, e);
}
final AsyncQueryJson asyncQueryJson = readValue(message, AsyncQueryJson.class);
final T value = objectMapper.treeToValue(asyncQueryJson.getQueryData(), bodyClass);
return new AsyncQuery<>(asyncQueryJson.getResource(), value);
}

@Override
public <T> DomainEvent<T> readDomainEvent(Message message, Class<T> bodyClass) {
try {
final DomainEventJson domainEventJson = readValue(message, DomainEventJson.class);
final T value = objectMapper.treeToValue(domainEventJson.getData(), bodyClass);
return new DomainEvent<>(domainEventJson.getName(), domainEventJson.getEventId(), value);
} catch (IOException e) {
throw new MessageConversionException(FAILED_TO_CONVERT_MESSAGE_CONTENT, e);
}
final DomainEventJson domainEventJson = readValue(message, DomainEventJson.class);
final T value = objectMapper.treeToValue(domainEventJson.getData(), bodyClass);
return new DomainEvent<>(domainEventJson.getName(), domainEventJson.getEventId(), value);
}

@Override
public <T> Command<T> readCommand(Message message, Class<T> bodyClass) {
try {
final CommandJson commandJson = readValue(message, CommandJson.class);
final T value = objectMapper.treeToValue(commandJson.getData(), bodyClass);
return new Command<>(commandJson.getName(), commandJson.getCommandId(), value);
} catch (IOException e) {
throw new MessageConversionException(FAILED_TO_CONVERT_MESSAGE_CONTENT, e);
}
final CommandJson commandJson = readValue(message, CommandJson.class);
final T value = objectMapper.treeToValue(commandJson.getData(), bodyClass);
return new Command<>(commandJson.getName(), commandJson.getCommandId(), value);
}

@Override
Expand All @@ -65,7 +51,7 @@ public CloudEvent readCloudEvent(Message message) {
public <T> T readValue(Message message, Class<T> valueClass) {
try {
return objectMapper.readValue(message.getBody(), valueClass);
} catch (IOException e) {
} catch (Exception e) {
throw new MessageConversionException(FAILED_TO_CONVERT_MESSAGE_CONTENT, e);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.reactivecommons.async.commons.converters.json;

import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectMapper;

import java.util.function.Supplier;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package org.reactivecommons.async.commons.converters.json;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.junit.jupiter.api.Test;
import tools.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Date;

import static org.assertj.core.api.Assertions.assertThat;
Expand All @@ -15,7 +17,7 @@ class DefaultObjectMapperSupplierTest {


@Test
void shouldMapWithUnknownProperties() throws IOException {
void shouldMapWithUnknownProperties() {
ObjectMapper objectMapper = defaultObjectMapperSupplier.get();

SampleClassExtra base = new SampleClassExtra("23", "one", new Date(), 45L);
Expand All @@ -26,6 +28,23 @@ void shouldMapWithUnknownProperties() throws IOException {
assertThat(result).usingRecursiveComparison().isEqualTo(base);
}

@Test
void shouldSerializeAndDeserializeLocalDateTime() {
ObjectMapper objectMapper = 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);
assertThat(serialized).contains("2025-12-10");

final SampleClassWithLocalDateTime result = objectMapper.readValue(serialized, SampleClassWithLocalDateTime.class);

assertThat(result.getId()).isEqualTo("123");
assertThat(result.getName()).isEqualTo("Test");
assertThat(result.getDateSend()).isEqualTo(now);
}

@Getter
private static class SampleClassExtra extends SampleClass {

Expand All @@ -37,4 +56,13 @@ public SampleClassExtra(String id, String name, Date date, Long newProp) {
private final Long newProp;
}

@Getter
@AllArgsConstructor
@NoArgsConstructor
private static class SampleClassWithLocalDateTime {
private String id;
private String name;
private LocalDateTime dateSend;
}

}
6 changes: 3 additions & 3 deletions async/async-kafka/async-kafka.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ dependencies {
api project(':async-commons-api')
api project(':domain-events-api')
api project(':async-commons')
api 'io.projectreactor.kafka:reactor-kafka:1.3.23'

implementation 'io.cloudevents:cloudevents-json-jackson:4.0.1'
api project(':cloudevents-json-jackson')
api 'io.projectreactor.kafka:reactor-kafka:1.3.25'
implementation 'io.cloudevents:cloudevents-core:4.0.1'
}
Loading