diff --git a/NEWS.md b/NEWS.md
index e376d3f4..cca76b82 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,6 +1,7 @@
-## 2025-mm-dd v4.5.0-SNAPSHOT
+## 2025-mm-dd v5.0.0-SNAPSHOT
* [MODSOURCE-919](https://folio-org.atlassian.net/browse/MODSOURCE-919) Fill in permissions header during event sending to Kafka
* [MODDICORE-464](https://folio-org.atlassian.net/browse/MODDICORE-464) Add links, linking rules setter to MarcBibRecordModifier
+* [MODDICORE-468](https://folio-org.atlassian.net/browse/MODDICORE-468) Upgrade to Vert.x v5.0 and RMB v36.0.0
## 2025-03-07 v4.4.0
* [MODDICORE-433](https://folio-org.atlassian.net/browse/MODDICORE-433) Add userId to event header and allow to send events with null token
diff --git a/pom.xml b/pom.xml
index 01ec68a1..deaf2ffb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
org.folio
data-import-processing-core
- 4.5.0-SNAPSHOT
+ 5.0.0-SNAPSHOT
jar
data-import-processing-core
@@ -23,8 +23,8 @@
2.6
2.0.17
4.13.2
- 3.12.1
- 35.4.0
+ 3.13.2
+ 36.0.0-SNAPSHOT
org.folio.processing.mapping.defaultmapper.**
**/OkapiConnectionParams.java
**/parameters/MappingParameters.java
@@ -45,7 +45,7 @@
io.vertx
vertx-stack-depchain
- 4.5.14
+ 5.0.5
pom
import
@@ -68,7 +68,7 @@
org.folio
folio-kafka-wrapper
- 3.4.0-SNAPSHOT
+ 4.0.0-SNAPSHOT
org.folio
diff --git a/src/main/java/org/folio/processing/events/services/processor/EventProcessorImpl.java b/src/main/java/org/folio/processing/events/services/processor/EventProcessorImpl.java
index b15d929a..60eec2b8 100644
--- a/src/main/java/org/folio/processing/events/services/processor/EventProcessorImpl.java
+++ b/src/main/java/org/folio/processing/events/services/processor/EventProcessorImpl.java
@@ -26,8 +26,8 @@ public class EventProcessorImpl implements EventProcessor {
@Override
public CompletableFuture process(DataImportEventPayload eventPayload) {
- LOG.debug("process:: Processing event payload jobExecutionId: {} recordId: {}",
- eventPayload.getJobExecutionId(), extractRecordId(eventPayload));
+ LOG.debug("process:: Processing event payload, eventType: {} jobExecutionId: {} recordId: {}",
+ eventPayload.getEventType(), eventPayload.getJobExecutionId(), extractRecordId(eventPayload));
CompletableFuture future = new CompletableFuture<>();
try {
Optional optionalEventHandler = eventHandlers.stream()
@@ -90,8 +90,8 @@ private void logEventProcessingTime(String eventType, long startTime, DataImport
eventType, profileType, profileId, (endTime - startTime) / 1000000L, eventPayload.getJobExecutionId(), extractRecordId(eventPayload));
}
} catch (Exception e) {
- LOG.warn("logEventProcessingTime:: An Exception occurred {} jobExecutionId: {} recordId: {}",
- e.getMessage(), eventPayload.getJobExecutionId(), extractRecordId(eventPayload));
+ LOG.warn("logEventProcessingTime:: An Exception occurred, jobExecutionId: {} recordId: {}",
+ eventPayload.getJobExecutionId(), extractRecordId(eventPayload), e);
}
}
diff --git a/src/main/java/org/folio/processing/matching/matcher/AbstractMatcher.java b/src/main/java/org/folio/processing/matching/matcher/AbstractMatcher.java
index 4c26556c..295cb768 100644
--- a/src/main/java/org/folio/processing/matching/matcher/AbstractMatcher.java
+++ b/src/main/java/org/folio/processing/matching/matcher/AbstractMatcher.java
@@ -44,11 +44,11 @@ public CompletableFuture match(DataImportEventPayload eventPayload) {
}
// Only one matching detail is expected in first implementation,
// in future matching will support multiple matching details combined in logic expressions
- MatchDetail matchDetail = matchProfile.getMatchDetails().get(0);
+ MatchDetail matchDetail = matchProfile.getMatchDetails().getFirst();
Value value = matchValueReader.read(eventPayload, matchDetail);
if (value != null && value.getType().equals(Value.ValueType.STRING)) {
- value = MatchIdProcessorUtil.retrieveIdFromContext(matchDetail.getExistingMatchExpression().getFields().get(0).getValue(),
+ value = MatchIdProcessorUtil.retrieveIdFromContext(matchDetail.getExistingMatchExpression().getFields().getFirst().getValue(),
eventPayload, (StringValue) value);
}
diff --git a/src/main/java/org/folio/processing/matching/matcher/HoldingsItemMatcher.java b/src/main/java/org/folio/processing/matching/matcher/HoldingsItemMatcher.java
index 0c3b5538..0703a0f8 100644
--- a/src/main/java/org/folio/processing/matching/matcher/HoldingsItemMatcher.java
+++ b/src/main/java/org/folio/processing/matching/matcher/HoldingsItemMatcher.java
@@ -1,6 +1,5 @@
package org.folio.processing.matching.matcher;
-import io.vertx.core.CompositeFuture;
import io.vertx.core.Future;
import io.vertx.core.Promise;
import io.vertx.core.json.JsonArray;
@@ -51,7 +50,7 @@ private CompletableFuture processMultipleMatching(Value genericValue, M
JsonArray matchedEntities = new JsonArray();
JsonArray errors = new JsonArray();
- List multipleFutures = new ArrayList<>();
+ List> multipleFutures = new ArrayList<>();
values.forEach(v -> {
Promise promise = Promise.promise();
multipleFutures.add(promise.future());
@@ -66,16 +65,16 @@ private CompletableFuture processMultipleMatching(Value genericValue, M
});
});
- CompositeFuture.join(multipleFutures)
+ Future.join(multipleFutures)
.onComplete(ar -> {
String errorsAsStringJson = errors.encode();
- if (matchedEntities.size() == 0 && errors.size() == values.size()) {
+ if (matchedEntities.isEmpty() && errors.size() == values.size()) {
resultFuture.completeExceptionally(new MatchingException(errorsAsStringJson));
} else {
eventPayload.getContext().put(ERRORS, errorsAsStringJson);
eventPayload.getContext().put(matchDetail.getExistingRecordType().value(), matchedEntities.encode());
eventPayload.getContext().put(NOT_MATCHED_NUMBER, String.valueOf(values.size() - matchedEntities.size() - errors.size()));
- resultFuture.complete(matchedEntities.size() > 0);
+ resultFuture.complete(!matchedEntities.isEmpty());
}
});
diff --git a/src/main/java/org/folio/rest/util/RestUtil.java b/src/main/java/org/folio/rest/util/RestUtil.java
index 2c3bff79..12775be9 100644
--- a/src/main/java/org/folio/rest/util/RestUtil.java
+++ b/src/main/java/org/folio/rest/util/RestUtil.java
@@ -1,6 +1,5 @@
package org.folio.rest.util;
-import com.fasterxml.jackson.databind.ObjectMapper;
import io.vertx.core.Future;
import io.vertx.core.Promise;
import io.vertx.core.Handler;
@@ -9,6 +8,7 @@
import io.vertx.core.http.HttpClient;
import io.vertx.core.http.HttpClientOptions;
import io.vertx.core.http.HttpMethod;
+import io.vertx.core.json.Json;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.client.HttpRequest;
import io.vertx.ext.web.client.HttpResponse;
@@ -97,9 +97,10 @@ public static Future doRequest(OkapiConnectionParams params
}
}
if (method == HttpMethod.PUT || method == HttpMethod.POST) {
- request.sendBuffer(Buffer.buffer(new ObjectMapper().writeValueAsString(payload)), handleResponse(promise));
+ request.sendBuffer(Buffer.buffer(Json.encode(payload)))
+ .onComplete(handleResponse(promise));
} else {
- request.send(handleResponse(promise));
+ request.send().onComplete(handleResponse(promise));
}
return promise.future();
} catch (Exception e) {
diff --git a/src/test/java/org/folio/processing/events/utils/PomReaderUtilTest.java b/src/test/java/org/folio/processing/events/utils/PomReaderUtilTest.java
index bb2ce73f..344661dd 100644
--- a/src/test/java/org/folio/processing/events/utils/PomReaderUtilTest.java
+++ b/src/test/java/org/folio/processing/events/utils/PomReaderUtilTest.java
@@ -50,7 +50,7 @@ void readFromJar() throws IOException, XmlPullParserException {
pom.readIt(null, "META-INF/maven/io.vertx"); // force reading from Jar
// first dependency in main pom
- assertThat(pom.getModuleName(), is("vertx_parent"));
+ assertThat(pom.getModuleName(), is("vertx_core_aggregator"));
}
@Test
diff --git a/src/test/java/org/folio/processing/events/utils/RestUtilTest.java b/src/test/java/org/folio/processing/events/utils/RestUtilTest.java
index 2a268ba0..11bc90de 100644
--- a/src/test/java/org/folio/processing/events/utils/RestUtilTest.java
+++ b/src/test/java/org/folio/processing/events/utils/RestUtilTest.java
@@ -1,9 +1,9 @@
package org.folio.processing.events.utils;
-import com.fasterxml.jackson.core.JsonProcessingException;
import com.github.tomakehurst.wiremock.client.WireMock;
import io.vertx.core.Promise;
import io.vertx.core.http.HttpMethod;
+import io.vertx.core.json.EncodeException;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.unit.Async;
import io.vertx.ext.unit.TestContext;
@@ -155,22 +155,17 @@ public void shouldReturnForbiddenStatus(TestContext testContext) throws IOExcept
}
@Test
- public void shouldReturnFailedFutureWhenJsonDoesntParse(TestContext testContext) throws IOException {
+ public void shouldReturnFailedFutureWhenJsonDoesntParse(TestContext testContext) {
Async async = testContext.async();
WireMock.stubFor(WireMock.post(PUBLISH_SERVICE_URL).willReturn(WireMock.forbidden()));
Object mockItem = mock(Object.class);
when(mockItem.toString()).thenReturn(mockItem.getClass().getName());
- Promise promise = Promise.promise();
RestUtil.doRequest(params, "/pubsub/publish", HttpMethod.POST, mockItem)
.onComplete(postPublishResult -> {
- if(postPublishResult.succeeded()) {
- fail();
- } else {
- Throwable throwable = postPublishResult.cause();
- Assert.assertTrue(throwable instanceof JsonProcessingException);
- }
+ testContext.assertTrue(postPublishResult.failed());
+ testContext.assertTrue(postPublishResult.cause() instanceof EncodeException);
async.complete();
});
}