Library Upgrade Details — Java, Spring Cloud, Jackson, BouncyCastle, HttpClient, Commons, Version Matrix
Parent doc:
upgrade-migration-guide-to-im-7-3-0.md
Confluence mirror: IM 7.2 → 7.3.0 — Library Upgrade Details — Java, Spring Cloud, Jackson, BouncyCastle, HttpClient, Commons, Version Matrix
1. Version Change Summary
|
Library / Component |
Old Version (IM 7.2.0) |
New Version (IM 7.3.0) |
Type |
|---|---|---|---|
|
Java |
17 |
21 |
Runtime |
|
Spring Boot |
3.1.5 |
3.5.12 |
Framework |
|
Spring Framework |
6.0.13 |
6.2.x |
Framework |
|
Spring Security |
6.1.5 |
6.5.x |
Framework |
|
Spring Cloud |
2022.0.4 |
2025.0.1 |
Framework |
|
Apache Camel |
4.1.0 |
4.18.1 (LTS) |
Framework |
|
Jackson |
2.15.x |
2.19.4 |
Serialization |
|
Apache CXF |
4.0.3 |
4.1.5 |
SOAP/WS |
|
Vavr |
0.9.3 |
1.0.0 |
Functional lib |
|
JSqlParser |
1.1 |
5.3 |
SQL parsing |
|
Apache POI |
4.1.2 |
5.5.1 |
Excel |
|
Eclipse Jetty |
11.0.17 (transitive) |
12.0.33 (+ EE10) |
Servlet container (via Camel/CXF) |
|
Fabric8 Kubernetes Client |
6.13.4 |
7.6.1 |
Kubernetes |
|
Jersey |
3.1.3 |
managed by SB BOM |
JAX-RS |
|
Jasypt Spring Boot |
3.0.5 |
4.0.4 |
Encryption |
|
Mockito |
3.11.2 |
5.21.0 |
Testing |
|
Spock |
2.4-M1-groovy-4.0 |
2.4-groovy-4.0 |
Testing |
|
WireMock |
3.9.1 |
3.13.2 |
Testing |
|
Groovy |
4.0.15 |
4.0.30 |
Language |
|
Jolokia |
1.6.2 |
2.5.0 |
JMX |
|
Eclipse JGit |
6.7.0 |
7.5.0 |
Git |
|
Flyway |
9.22.3 (via SB) |
11.3.1 (via SB) |
DB migration |
|
AspectJ |
1.9.7 |
1.9.25.1 |
AOP |
|
Apache HttpClient |
4.x (via SB) |
5.x (via SB) |
HTTP |
|
AWS SDK |
2.15.50 |
2.42.13 |
Cloud |
|
Guava |
32.0.1-jre |
33.5.0-jre |
Utility |
|
Methanol |
1.3.0 |
1.8.4 |
HTTP |
|
Lombok |
1.18.30 |
1.18.44 |
Codegen |
|
Commons IO |
2.14.0 |
2.21.0 |
Utility |
|
Commons Lang3 |
3.18.0 |
3.20.0 |
Utility |
|
Commons CSV |
1.8 |
1.14.1 |
CSV |
|
Commons Compress |
(old) |
1.28.0 |
Compression |
|
Angus Mail |
2.0.2 |
2.0.5 |
|
|
SnakeYAML |
1.25 |
2.6 |
YAML parsing (direct dep in |
|
org.json:json |
20231013 |
20251224 |
JSON utility (direct dep) |
|
Prometheus client |
|
|
Metrics exposition (via Micrometer) |
|
WSS4J |
(not present) |
4.0.1 |
WS-Security (transitive via CXF) |
|
OpenSAML |
(not present) |
5.1.6 |
SAML (transitive via WSS4J) |
|
OpenTelemetry |
(not present) |
1.49.0 |
Tracing (transitive via google-cloud-storage) |
2. Removed Dependencies
|
Dependency |
Reason |
|---|---|
|
|
Bootstrap context removed |
|
|
No longer needed with new codegen |
|
|
Codegen generates Jakarta natively |
|
|
Replaced by Jakarta validation |
|
|
Managed by Spring Boot BOM |
|
|
Was unused |
|
|
Replaced by |
|
|
Replaced by |
|
|
Direct dependency removed from |
|
|
Direct dependency replaced by |
|
|
Managed transitively |
|
|
Direct dependency removed from |
|
|
javax→jakarta replacement no longer needed |
|
|
Repository management consolidated |
|
|
Auto-registered by Jackson 2.17+ |
4. Java 17 → 21
Impact: HIGH | Type: Runtime, Build
Breaking Changes & New Behavior
-
Virtual threads (Project Loom): Available but not automatically used. Libraries may opt-in, affecting thread-local behavior (e.g., ThreadLocal cleanup patterns differ with virtual threads).
-
Sequenced collections:
LinkedHashMap,LinkedHashSet,TreeMapnow implementSequencedCollection/SequencedMapinterfaces. New methodsgetFirst(),getLast(),reversed(),putFirst(),putLast(). This is additive but may cause ambiguity if user code defines these method names. -
Strong encapsulation: JDK internal APIs are more strictly encapsulated. Some
--add-opensflags may be needed for libraries that reflectively access JDK internals (Lombok, etc.). -
Pattern matching for
switchand record patterns: Available for use. Not breaking. -
Deprecation removals:
Thread.stop(),Runtime.exec(String)overloads with single-string command,Finalizationmarked for removal. -
-XX:+UseCompactObjectHeaders: New experimental JVM option for reduced memory footprint. -
UTF-8 by default:
System.outandSystem.errdefault to UTF-8 encoding on all platforms (since Java 18). Previously platform-dependent.
IM Impact (Applied in Branch)
-
pom.xmlproperty<java.version>21</java.version>updated across all modules and archetypes. -
Dockerfile (the only one shipped is
integration-apps/integration-runner-app/src/main/docker/Dockerfile) changed fromamazoncorretto:17-al2-jdktocregistry.pricefx.eu/im/images/toolchains/corretto-mvn:25-202604150757— the Pricefx-internal Corretto+Maven toolchain image (:25-…is a build-tag identifier on the toolchain image, not a Java major version — the JVM inside is Java 21). -
Maven compiler plugin adds
--add-opensfor Lombok annotation processing on JDK 21:XML<arg>--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg> <arg>--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg> <arg>--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg> <arg>--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg> <arg>--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg> -
gmavenplus-pluginconfigured with<targetBytecode>21</targetBytecode>. -
CDS (Class Data Sharing) archive generation added to Dockerfile for faster startup.
Migration Action Required
-
CI/CD pipelines must use Java 21.
-
Custom Docker images must use Java 21 base images.
-
Any code relying on
javax.security.certpackage (removed in Java 21) must migrate.
5. Spring Cloud 2022.0.4 → 2025.0.1
Impact: HIGH | Type: Configuration, Bootstrap
5.1 Bootstrap Context Removed
This is the most significant user-facing change.
-
spring-cloud-starter-bootstrapis no longer needed and has been removed. -
All
bootstrap.yml/bootstrap.yaml/bootstrap.propertiesfiles must be deleted. -
Spring Cloud Config Server connection now uses
spring.config.import=optional:configserver:mechanism. -
Config server properties (URI, label, profile) move to
application.properties.
5.2 Spring Cloud Stream Changes
-
Reactive Supplier pattern replaced with
StreamBridge: TheSupplier<Flux<Message>>pattern for event publishing is no longer the recommended approach. -
spring.cloud.function.definitionproperty removed from defaults — Spring Cloud Stream 4.x auto-detects functions. -
spring.cloud.stream.function.autodetectproperty introduced to control this. -
Auto-configuration exclusion list expanded:
BindingServiceConfigurationadded alongsideFunctionConfigurationwhen MQ is disabled.
5.3 Spring Cloud Config Client
-
Configured via
spring.config.import=optional:configserver:in application properties. -
No longer relies on bootstrap context for early config server connection.
IM Impact (Applied in Branch)
-
7
bootstrap.ymlfiles deleted across modules/archetypes:-
integration-apps/integration-app/src/main/resources/bootstrap.yml -
integration-apps/pricefx-integration-app/src/main/resources/bootstrap.yml -
integration-archetype-custom-image/src/main/resources/src/bootstrap.yml -
integration-archetype-custom-image/src/test/resources/projects/reference/src/bootstrap.yml -
integration-archetype/src/main/resources/archetype-resources/src/main/resources/bootstrap.yml -
(and archetype-provisioned equivalent)
-
-
spring-cloud-starter-bootstrapdependency removed, replaced withspring-cloud-starter-config. -
RabbitMQOutputAutoConfigurationcompletely rewritten:-
Old:
Supplier<Flux<Message<String>>>bean pattern withImInternalEventsChannelcallback + Reactor Flux. -
New:
StreamBridge.send(OUTPUT_BINDING, message)— simpler, imperative approach. -
Removed
Flux,reactor.core.publisher,@AllArgsConstructorfrom this class.
-
-
PfxInitListenerenhanced with improved event-driven configuration logic:-
New
configureEventDriven()method. -
Added
BindingServiceConfigurationto auto-config exclusions. -
Added
spring.cloud.stream.function.autodetect=falsewhen MQ is disabled. -
Logs property sources at startup for debugging.
-
-
spring.cloud.function.definition=imInternalEventsSupplierremoved fromdefault-application.properties. -
Test
application.propertiesincludesspring.config.import=optional:configserver:. -
.gitlab-ci.ymlrelease script no longer updatesbootstrap.ymllabels.
7. Jackson 2.15.x → 2.19.4
Impact: HIGH | Type: Behavior, Serialization
7.1 StreamReadConstraints (2.15+, defaults tightened in 2.16+)
This is a critical change — identical to the issue documented in MR !1507.
Jackson 2.15+ introduced StreamReadConstraints with default limits:
|
Constraint |
Default |
|---|---|
|
Max string length |
20,000,000 characters (20 MB) |
|
Max number length |
1,000 characters |
|
Max nesting depth |
1,000 |
These defaults can cause StreamConstraintsException when processing large JSON payloads (e.g., large Pricefx API responses). The error message format also changed between versions.
IM Impact: Test assertions for StreamConstraints error messages updated for the new format.
7.2 Coercion Configuration Changes (2.16+)
Jackson 2.16+ tightened default coercion rules:
-
String-to-Integer coercion: If JSON contains
"123"(string) where anIntegeris expected, Jackson may reject by default. -
Empty string coercion: Handling of
""for numeric types changed.
IM Impact: Explicit String-to-Integer coercion enabled for PriceFx API compatibility (the Pricefx API returns some integer fields as strings).
7.3 JavaTimeModule Auto-Registration (2.17+)
Jackson 2.17+ auto-discovers JavaTimeModule via ServiceLoader when on classpath. Explicit registration is no longer needed.
IM Impact: import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule removed from UserEventUtils.java.
7.4 Version Alignment via BOM
All Jackson modules now managed via jackson-bom:
<dependency>
<groupId>com.fasterxml.jackson</groupId>
<artifactId>jackson-bom</artifactId>
<version>${jackson.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Previously individual modules had inconsistent versions (e.g., jackson-datatype-jsr310 at 2.12.4, jackson-databind at 2.15.2). All now aligned to 2.19.4.
7.5 RecyclerPool Default Changed (2.17)
Default RecyclerPool changed from threadLocalPool to newLockFreePool. May affect multi-threaded performance characteristics (generally better for virtual threads).
7.6 POJO Property Introspection Rewritten (2.18)
Jackson 2.18 completely rewrote POJO property introspection. May change behavior for:
-
Cyclic references
-
NamingStrategywith creators -
Record field annotations
7.7 Other Jackson Changes (2.16 → 2.19)
-
@JsonProperty(required=true)now enforced during deserialization by default. -
StreamReadFeature.INCLUDE_SOURCE_IN_LOCATIONdefaults tofalse(2.16) — error messages no longer include source content. -
Leading-zero strings (
"07") no longer coercible as numbers for enum indexes (2.17). -
ObjectMapper.canDeserialize()andcanSerialize()deprecated (2.18). -
jackson-datatype-threetenbpupdated to2.18.2inpricefx-client(JSR-310 ThreeTenBP backport).
8. Jasypt Spring Boot 3.0.5 → 4.0.4 / BouncyCastle
Impact: LOW (resolved) | Type: Encryption, Security
BouncyCastle CBC-Mode IV Behavior (timeline)
BouncyCastle changed how CBC-mode PBE handles initialization vectors across the recent 1.7x/1.8x series:
-
BC 1.78–1.80: Strict IV-length check enforced on CBC-mode PBE algorithms (e.g.
PBEWithSHA256And256BitAES-CBC-BC). Jasypt's defaultNoIvGeneratorno longer works →EncryptionOperationNotPossibleExceptionon decrypt. -
BC 1.81+: Backward compatibility restored.
NoIvGeneratorworks again on CBC-mode PBE — see bc-java#1985.
IM Impact (Applied in Branch — PFIMCORE-2971)
The IM 7.3.0 upgrade transitively pulled in BC 1.80 via spring-cloud-starter, which would have broken decryption of all existing IM 7.2 connection passwords on IaaS workers. This was caught and fixed before release.
Final fix: pin bcprov-jdk18on to 1.83 in pricefx-integration/pom.xml:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<version>1.83</version>
</dependency>
A brief intermediate workaround that added encryptor.setIvGenerator(new RandomIvGenerator()) to ConnectionLookup.inlinedConnectionEncryptor was reverted in the same fix, because it would have required re-encrypting every customer password and broken orchestrator↔worker compatibility.
Net result for customers: no action required. Existing encrypted passwords keep working unchanged on IM 7.3.0.
10. Apache HttpClient 4.x → 5.x
Impact: HIGH (for custom code) | Type: API, Package relocation
Package Changes
|
Old (HttpClient 4) |
New (HttpClient 5) |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IM Impact
-
Managed transitively by Spring Boot. Explicit
httpclient5:5.1.4dependency and exclusion fromspring-cloud-config-clientremoved. -
Customer code using HttpClient directly needs package migration.
11. Commons Libraries
Commons IO 2.14.0 → 2.21.0
Impact: LOW — Bug fixes. org.apache.velocity.shaded.commons.io.FilenameUtils replaced with org.apache.commons.io.FilenameUtils (direct dependency).
Commons Lang3 3.18.0 → 3.20.0
Impact: LOW — Bug fixes and new methods.
Commons CSV 1.8 → 1.14.1
Impact: LOW-MEDIUM — Parser behavior changes for edge cases. Version now managed by parent POM.
Commons Compress → 1.28.0 (new explicit)
Impact: LOW — Aligned with Camel parent.
Commons Collections 3.2.2 → Collections4 4.4
Impact: MEDIUM — Package change: org.apache.commons.collections → org.apache.commons.collections4.
IM Impact (current state on feature/PFIMCORE-2956) — migration is partial:
-
Direct
commons-collectionsv3 dependency declarations removed from POMs (commons-collections4is the declared dep). -
v3 jar (
3.2.2) is still on the runtime classpath transitively viacommons-beanutils:1.11.0. -
~18 source files in
pricefx-integration/src/main/javastill importorg.apache.commons.collections.*(v3 package). These compile and run because the v3 jar is still resolved transitively. Examples:-
MapUtils(v3):MetadataProcessor,CustomerService,QuoteService,PricingParameterUtils,ProducerUtils,PriceOptimizationUtils,ReloadRoutesUtils,TemplatesUtils,HttpAuditTypeCommand,SalesforceAuthenticationOAuth,PriceOptimizerDataModelService,PricingParameterProcessorUtils -
CollectionUtils.isNotEmpty(v3):DeploymentContext,PfxEventComponent -
map.UnmodifiableMap(v3):ConnectionPool -
Class literal in Groovy sandbox whitelist:
GroovySecurityDefaultSettings.java:325(org.apache.commons.collections.MapUtils.class)
-
-
Full migration of these to
collections4is tracked as a GAP (see Section 15).
Target state — fully migrated imports look like:
// Before
import static org.apache.commons.collections.MapUtils.getMap;
import static org.apache.commons.collections.CollectionUtils.isNotEmpty;
import org.apache.commons.collections.map.UnmodifiableMap;
// After
import static org.apache.commons.collections4.MapUtils.getMap;
import static org.apache.commons.collections4.CollectionUtils.isNotEmpty;
import org.apache.commons.collections4.map.UnmodifiableMap;
Commons Codec — Removed
org.apache.commons.codec.binary.Base64 replaced with java.util.Base64.
Commons BeanUtils — Removed
Removed from pricefx-client dependencies.
12. Full Library Version Matrix
Runtime / Toolchain
|
Component |
Version |
|---|---|
|
Java |
21 (Corretto) |
|
Maven |
3.9.x (toolchain image) |
Managed by Camel Parent BOM (camel.version=4.18.1)
|
Property |
Version |
|---|---|
|
|
2.0.5 |
|
|
1.28.0 |
|
|
1.14.1 |
|
|
2.21.0 |
|
|
3.20.0 |
|
|
4.1.5 |
|
|
4.0.30 |
|
|
33.5.0-jre |
|
|
2.19.4 |
|
|
2.5.0 |
|
|
5.21.0 |
|
|
2.4-groovy-4.0 |
|
|
3.5.12 |
|
|
1.0.0 |
|
|
3.13.2 |
Project-Specific Versions
|
Property |
Version |
|---|---|
|
|
1.9.25.1 |
|
|
2.42.13 |
|
|
1.19+pricefx-20240201 |
|
|
4.0.4 |
|
|
5.3 |
|
|
2.5.0 |
|
|
8.0 |
|
|
1.18.44 |
|
|
1.8.4 |
|
|
11.2.0.4 |
|
|
0.10.2 |
|
|
2.2.0 |
|
|
2025.0.1 |
|
|
1.3.9 |
Transitively Managed (notable, no explicit *.version property)
These come in via Spring Boot, Camel, or CXF BOMs and are not pinned in IM POMs. Versions follow the BOM and may shift on minor BOM bumps. Versions below were captured from mvn dependency:tree on pricefx-integration at v7.3.0.
|
Library |
Version |
Pulled in via |
|---|---|---|
|
Spring Framework |
6.2.17 |
Spring Boot 3.5.12 |
|
Spring Security |
6.5.9 |
Spring Boot 3.5.12 |
|
Apache HttpClient 5 |
5.5.2 |
Spring Boot 3.5.12 |
|
Tomcat Embed Core |
10.1.52 |
|
|
Reactor Core |
3.7.17 |
|
|
Reactor Netty |
1.2.16 |
|
|
Netty |
4.1.131.Final |
Reactor / AWS SDK / Vert.x |
|
Apache POI |
5.5.1 |
Camel 4.18.1 BOM |
|
Eclipse Jetty (core + EE10) |
12.0.33 |
|
|
Vert.x |
4.5.14 |
|
|
Fabric8 Kubernetes Client |
7.6.1 |
direct dep, version managed by Spring Boot/Camel BOM |
|
Flyway Core |
11.x |
Spring Boot 3.5.12 |
|
Eclipse JGit |
7.5.0 |
direct dep on |
|
BouncyCastle ( |
1.83 |
direct dep (pinned) + transitive via |
|
WSS4J |
4.0.1 |
|
|
OpenSAML |
5.1.6 |
WSS4J |
|
Shibboleth ( |
9.1.6 |
OpenSAML |
|
Apache Santuario ( |
4.0.4 |
WSS4J |
|
Ehcache (jakarta) |
3.10.9 |
WSS4J |
|
OpenTelemetry |
1.49.0 |
|
|
Prometheus metrics client |
1.3.10 |
|
|
Apache Velocity |
2.4.1 |
|
|
Quartz Scheduler |
2.5.2 |
|
|
|
3.2.2 (transitive only) |
|