This is an automated email from the ASF dual-hosted git repository.
gitgabrio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new a37cfec845 [incubator-kie-issues#2288] - Springboot 4.0.x upgrade
(#6686)
a37cfec845 is described below
commit a37cfec845c83311201047359f4001295dafa792
Author: Nithin R Krishnan <[email protected]>
AuthorDate: Mon May 18 14:05:32 2026 +0530
[incubator-kie-issues#2288] - Springboot 4.0.x upgrade (#6686)
* Update dependency versions to align with the spring boot 4.0.x upgrade
* Add infinispan-commons-spi dependency to avoid class duplication issues
* Add infinispan-commons-spi dependency to resolve class duplication issues
* Replace Jackson2ObjectMapperBuilderCustomizer in ruleunits
RestObjectMapperSpringTemplate for Spring Boot 4
* Update okhttp3 dependency version to 4.12.0 in pom.xml
* Add custom MappingJackson2HttpMessageConverter for Spring Boot 4
compatibility
* Update RestObjectMapperSpringTemplate.java for Jackson 3 migration
preparation
* chore: retrigger CI
* refactor: remove deprecated lz4-java dependency and its exclusions
* refactor: unify JUnit version properties for consistency
* refactor: update TODO for Jackson 3 migration and adjust canWrite logic
in MappingJackson2HttpMessageConverter
* refactor: update TODO comments for Jackson 2 configuration in
RestObjectMapperSpringTemplate
* refactor: update JUnit version properties and enhance Jackson 2
configuration comments for migration clarity
* refactor: standardize JUnit version property naming in pom.xml
* refactor: synchronize trait class builder factory mode handling in
AbstractTraitFactory
* refactor: clarify JUnit 6 version property comment in pom.xml
* ci: retrigger
* netty patch version matching cve
* ci: retrigger
---
build-parent/pom.xml | 47 ++++++++++------------
.../ruleunits/RestObjectMapperSpringTemplate.java | 40 +++++++++++-------
.../drools-reliability-infinispan/pom.xml | 10 +++++
.../drools-reliability-tests/pom.xml | 10 +++++
.../core/factmodel/AbstractTraitFactory.java | 14 +++++--
5 files changed, 78 insertions(+), 43 deletions(-)
diff --git a/build-parent/pom.xml b/build-parent/pom.xml
index 216d81e433..89ab809ff0 100644
--- a/build-parent/pom.xml
+++ b/build-parent/pom.xml
@@ -51,26 +51,26 @@
- A version property must be specified in the format
"version.{groupId}", optionally with a suffix to make it unique.
- Version properties must be sorted alphabetically (other form of
sorting were found to be unclear and ambiguous).
-->
- <version.ch.qos.logback>1.5.25</version.ch.qos.logback>
+ <version.ch.qos.logback>1.5.32</version.ch.qos.logback>
<version.commons-codec>1.19.0</version.commons-codec>
<version.commons-collections>3.2.2</version.commons-collections>
<version.commons-logging>1.1.1</version.commons-logging>
<version.commons-io>2.20.0</version.commons-io>
<version.common-text>1.14.0</version.common-text>
- <version.com.fasterxml.jackson>2.21.1</version.com.fasterxml.jackson>
-
<version.com.fasterxml.jackson.databind>2.21.1</version.com.fasterxml.jackson.databind>
+ <version.com.fasterxml.jackson>2.21.2</version.com.fasterxml.jackson>
+
<version.com.fasterxml.jackson.databind>2.21.2</version.com.fasterxml.jackson.databind>
<version.com.fasterxml.jackson.annotations>2.21</version.com.fasterxml.jackson.annotations>
<version.com.github.victools>4.37.0</version.com.github.victools> <!--
victools should align with Jackson if possible -->
<version.com.miglayout>3.7.4</version.com.miglayout>
<version.domino-slf4j-logger>1.0.1</version.domino-slf4j-logger>
<version.com.google.protobuf>3.25.5</version.com.google.protobuf>
- <version.com.h2database>2.3.232</version.com.h2database>
+ <version.com.h2database>2.4.240</version.com.h2database>
<version.com.networknt.json-schema-validator>1.0.86</version.com.networknt.json-schema-validator>
<version.com.sun.xml.bind>4.0.5</version.com.sun.xml.bind>
<version.com.thoughtworks.xstream>1.4.21</version.com.thoughtworks.xstream>
<version.guru.nidi>0.18.0</version.guru.nidi>
<version.info.picocli>4.7.7</version.info.picocli>
- <version.io.micrometer>1.14.12</version.io.micrometer>
+ <version.io.micrometer>1.16.4</version.io.micrometer>
<version.io.quarkus>3.27.3</version.io.quarkus>
<version.io.netty>4.1.133.Final</version.io.netty>
<version.io.smallrye.openapi.core>4.0.12</version.io.smallrye.openapi.core>
@@ -78,13 +78,15 @@
<version.org.apache.kafka>4.1.2</version.org.apache.kafka>
<version.it.unimi.dsi.fastutil>8.5.11</version.it.unimi.dsi.fastutil>
+ <!-- JUnit 4 API for legacy test classes that still use org.junit.*
annotations.
+ junit-vintage-engine (part of JUnit 6, see version.org.junit) runs
them on the JUnit Platform. -->
<version.junit>4.13.2</version.junit>
<version.net.java.dev.glazedlists>1.8.0</version.net.java.dev.glazedlists>
<version.antlr>2.7.7</version.antlr>
<version.org.antlr>3.5.2</version.org.antlr>
<version.org.antlr.ST4>4.0.7</version.org.antlr.ST4>
<version.org.apache.ant>1.10.11</version.org.apache.ant>
- <version.org.apache.commons.lang3>3.18.0</version.org.apache.commons.lang3>
+ <version.org.apache.commons.lang3>3.19.0</version.org.apache.commons.lang3>
<version.org.apache.commons.math3>3.6.1</version.org.apache.commons.math3>
<version.org.apache.httpcomponents.httpcore>4.4.16</version.org.apache.httpcomponents.httpcore>
<version.org.apache.maven>3.9.11</version.org.apache.maven>
@@ -98,9 +100,9 @@
<version.org.freemarker>2.3.34</version.org.freemarker>
<version.org.glassfish.jaxb>4.0.6</version.org.glassfish.jaxb>
<!--This needs to be in sync with JUnit-->
- <version.org.hamcrest>2.2</version.org.hamcrest>
+ <version.org.hamcrest>3.0</version.org.hamcrest>
<version.org.hsqldb>2.7.1</version.org.hsqldb>
- <version.org.infinispan>15.0.21.Final</version.org.infinispan>
+ <version.org.infinispan>15.2.6.Final</version.org.infinispan>
<version.org.infinispan.protostream>5.0.13.Final</version.org.infinispan.protostream>
<version.org.javassist>3.26.0-GA</version.org.javassist>
<version.org.jboss.narayana.tomcat>7.2.2.Final</version.org.jboss.narayana.tomcat>
@@ -121,15 +123,15 @@
<version.jakarta.json-api>2.1.3</version.jakarta.json-api>
<version.org.apache.openjpa>4.0.0</version.org.apache.openjpa>
<version.org.jpmml.model>1.6.4</version.org.jpmml.model> <!-- jpmml-model
BSD 3C license - ATTENTION 1.5.1 intentional, because 1.5.1 evaluators works
with 1.5.1 -->
- <version.org.junit.jupiter>5.13.4</version.org.junit.jupiter>
- <version.org.junit.platform>1.13.4</version.org.junit.platform> <!-- Keep
synchronized with junit-jupiter (middle and minor should be the same) -->
+ <!-- JUnit 6: single version property for jupiter + platform + vintage
artifacts. See version.junit above for the legacy JUnit 4 API. -->
+ <version.org.junit>6.0.3</version.org.junit>
<version.org.mvel>2.5.2.Final</version.org.mvel>
<version.org.powermock>2.0.9</version.org.powermock>
<version.org.slf4j>2.0.17</version.org.slf4j>
<!-- simple-jndi is a small library that helps us avoid JNDI error
messages during testing -->
<version.simple-jndi>0.11.4.1</version.simple-jndi>
<version.xerces>2.12.0.SP04</version.xerces>
- <version.com.squareup.okhttp3>4.9.2</version.com.squareup.okhttp3>
+ <version.com.squareup.okhttp3>4.12.0</version.com.squareup.okhttp3>
<!-- External dependency versions bom -->
<!--
################################################################################
-->
@@ -647,42 +649,42 @@
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
- <version>${version.org.junit.jupiter}</version>
+ <version>${version.org.junit}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
- <version>${version.org.junit.jupiter}</version>
+ <version>${version.org.junit}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
- <version>${version.org.junit.jupiter}</version>
+ <version>${version.org.junit}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
- <version>${version.org.junit.jupiter}</version>
+ <version>${version.org.junit}</version>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
- <version>${version.org.junit.jupiter}</version>
+ <version>${version.org.junit}</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
- <version>${version.org.junit.platform}</version>
+ <version>${version.org.junit}</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-engine</artifactId>
- <version>${version.org.junit.platform}</version>
+ <version>${version.org.junit}</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
- <version>${version.org.junit.platform}</version>
+ <version>${version.org.junit}</version>
</dependency>
<dependency>
@@ -1334,13 +1336,6 @@
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>${version.org.apache.kafka}</version>
- <exclusions>
- <!-- Exclude old org.lz4 to avoid duplicate classes with at.yawk.lz4
-->
- <exclusion>
- <groupId>org.lz4</groupId>
- <artifactId>lz4-java</artifactId>
- </exclusion>
- </exclusions>
</dependency>
</dependencies>
diff --git
a/drools-model/drools-model-codegen/src/main/resources/class-templates/ruleunits/RestObjectMapperSpringTemplate.java
b/drools-model/drools-model-codegen/src/main/resources/class-templates/ruleunits/RestObjectMapperSpringTemplate.java
index dd479555b5..23e5a4a7a5 100644
---
a/drools-model/drools-model-codegen/src/main/resources/class-templates/ruleunits/RestObjectMapperSpringTemplate.java
+++
b/drools-model/drools-model-codegen/src/main/resources/class-templates/ruleunits/RestObjectMapperSpringTemplate.java
@@ -18,19 +18,18 @@
*/
package $Package$;
-import java.util.List;
-
import java.io.IOException;
import java.util.List;
-import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.ContextualDeserializer;
+import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.type.CollectionType;
import org.drools.ruleunits.api.DataSource;
@@ -38,23 +37,36 @@ import org.drools.ruleunits.api.DataStore;
import org.drools.ruleunits.api.DataStream;
import org.drools.ruleunits.api.SingletonStore;
-import
org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.SpringBootConfiguration;
+import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
-import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+import org.springframework.http.MediaType;
+import
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+// Jackson 2 Spring configuration — remove together with
https://github.com/apache/incubator-kie-drools/issues/6702 (Jackson 3
migration).
@SpringBootConfiguration
public class RestObjectMapper {
+ public RestObjectMapper(ObjectMapper objectMapper) {
+ SimpleModule module = new SimpleModule();
+ module.addDeserializer(DataStream.class, new DataStreamDeserializer());
+ module.addDeserializer(DataStore.class, new DataStoreDeserializer());
+ module.addDeserializer(SingletonStore.class, new
SingletonStoreDeserializer());
+ objectMapper.registerModule(module);
+ }
+
+ // Jackson 2 HTTP message converter — remove together with
https://github.com/apache/incubator-kie-drools/issues/6702 (Jackson 3
migration).
@Bean
- public Jackson2ObjectMapperBuilderCustomizer customizeObjectMapper() {
- return new Jackson2ObjectMapperBuilderCustomizer() {
+ @ConditionalOnMissingBean(MappingJackson2HttpMessageConverter.class)
+ public MappingJackson2HttpMessageConverter
mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
+ return new MappingJackson2HttpMessageConverter(objectMapper) {
@Override
- public void customize(Jackson2ObjectMapperBuilder builder) {
- //addDefaultDeserializers
- builder.deserializerByType(DataStream.class, new
DataStreamDeserializer());
- builder.deserializerByType(DataStore.class, new
DataStoreDeserializer());
- builder.deserializerByType(SingletonStore.class, new
SingletonStoreDeserializer());
+ public boolean canWrite(Class<?> clazz, MediaType mediaType) {
+ // Refuse String so DMN controllers' pre-serialized JSON
passes through StringHttpMessageConverter.
+ if (clazz == String.class) {
+ return false;
+ }
+ return super.canWrite(clazz, mediaType);
}
};
}
@@ -120,4 +132,4 @@ public class RestObjectMapper {
return deserializer;
}
}
-}
\ No newline at end of file
+}
diff --git a/drools-reliability/drools-reliability-infinispan/pom.xml
b/drools-reliability/drools-reliability-infinispan/pom.xml
index b63c8b2e97..3cd4f2b5b4 100644
--- a/drools-reliability/drools-reliability-infinispan/pom.xml
+++ b/drools-reliability/drools-reliability-infinispan/pom.xml
@@ -93,6 +93,16 @@
<ignoreClass>org.infinispan.*</ignoreClass>
</ignoreClasses>
</dependency>
+ <dependency>
+ <!-- Upstream packaging duplicates these SPI classes
between commons and commons-spi at 15.2.6.Final; bytes are identical. -->
+ <groupId>org.infinispan</groupId>
+ <artifactId>infinispan-commons-spi</artifactId>
+ <type>jar</type>
+ <ignoreClasses>
+
<ignoreClass>org.infinispan.commons.spi.OffHeapMemory</ignoreClass>
+
<ignoreClass>org.infinispan.commons.spi.ThreadCreator</ignoreClass>
+ </ignoreClasses>
+ </dependency>
</dependencies>
</banDuplicateClasses>
</rules>
diff --git a/drools-reliability/drools-reliability-tests/pom.xml
b/drools-reliability/drools-reliability-tests/pom.xml
index 6c88e19cf8..4ed09efd17 100644
--- a/drools-reliability/drools-reliability-tests/pom.xml
+++ b/drools-reliability/drools-reliability-tests/pom.xml
@@ -199,6 +199,16 @@
<ignoreClass>org.infinispan.*</ignoreClass>
</ignoreClasses>
</dependency>
+ <dependency>
+ <!-- Upstream packaging duplicates these SPI classes
between commons and commons-spi at 15.2.6.Final; bytes are identical. -->
+ <groupId>org.infinispan</groupId>
+ <artifactId>infinispan-commons-spi</artifactId>
+ <type>jar</type>
+ <ignoreClasses>
+
<ignoreClass>org.infinispan.commons.spi.OffHeapMemory</ignoreClass>
+
<ignoreClass>org.infinispan.commons.spi.ThreadCreator</ignoreClass>
+ </ignoreClasses>
+ </dependency>
</dependencies>
</banDuplicateClasses>
</rules>
diff --git
a/drools-traits/src/main/java/org/drools/traits/core/factmodel/AbstractTraitFactory.java
b/drools-traits/src/main/java/org/drools/traits/core/factmodel/AbstractTraitFactory.java
index f20de7e9d5..8376309f36 100644
---
a/drools-traits/src/main/java/org/drools/traits/core/factmodel/AbstractTraitFactory.java
+++
b/drools-traits/src/main/java/org/drools/traits/core/factmodel/AbstractTraitFactory.java
@@ -74,9 +74,13 @@ public abstract class AbstractTraitFactory<T extends
Thing<K>, K extends Traitab
protected static void setMode(VirtualPropertyMode newMode,
InternalRuleBase kBase, RuntimeComponentFactory rcf) {
TraitFactoryImpl traitFactory = (TraitFactoryImpl)
rcf.getTraitFactory(kBase);
traitFactory.mode = newMode;
- switch (newMode) {
+ syncBuilderFactoryWithMode(newMode);
+ }
+
+ private static synchronized void
syncBuilderFactoryWithMode(VirtualPropertyMode mode) {
+ switch (mode) {
case MAP:
- if (!(traitClassBuilderFactory.getPropertyWrapperBuilder()
instanceof TraitMapProxyClassBuilderImpl)) {
+ if (!(traitClassBuilderFactory.getPropertyWrapperBuilder()
instanceof TraitMapPropertyWrapperClassBuilderImpl)) {
traitClassBuilderFactory.setPropertyWrapperBuilder(new
TraitMapPropertyWrapperClassBuilderImpl());
}
if (!(traitClassBuilderFactory.getTraitProxyBuilder()
instanceof TraitMapProxyClassBuilderImpl)) {
@@ -92,7 +96,7 @@ public abstract class AbstractTraitFactory<T extends
Thing<K>, K extends Traitab
}
break;
default:
- throw new RuntimeException(" This should not happen :
unexpected property wrapping method " + newMode);
+ throw new RuntimeException(" This should not happen :
unexpected property wrapping method " + mode);
}
}
@@ -194,6 +198,10 @@ public abstract class AbstractTraitFactory<T extends
Thing<K>, K extends Traitab
}
protected Class<T> buildProxyClass(K core, Class<?> trait) {
+ // The trait class builder factory is static and may have been left in
a different
+ // VirtualPropertyMode by an earlier call. Re-sync it to this
factory's mode so the
+ // generated proxy class has constructors that match the lookup in
cacheConstructor.
+ syncBuilderFactoryWithMode(mode);
Class coreKlass = core.getClass();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]