IM 7.2.0 → 7.3.0 — Library Upgrade Details (Java, Spring Cloud, Jackson, etc.)

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

Email

SnakeYAML

1.25

2.6

YAML parsing (direct dep in pricefx-integration)

org.json:json

20231013

20251224

JSON utility (direct dep)

Prometheus client

simpleclient 0.16.0

prometheus-metrics 1.3.10

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

spring-cloud-starter-bootstrap

Bootstrap context removed

jakarta.jws:jakarta.jws-api

No longer needed with new codegen

javax.ws.rs:javax.ws.rs-api

Codegen generates Jakarta natively

javax.validation:validation-api

Replaced by Jakarta validation

jakarta.activation:jakarta.activation-api (explicit)

Managed by Spring Boot BOM

org.scala-lang:scala-library

Was unused

com.brsanthu:migbase64

Replaced by java.util.Base64

commons-codec:commons-codec

Replaced by java.util.Base64

commons-beanutils:commons-beanutils

Direct dependency removed from pricefx-client (still on classpath transitively in pricefx-integration via other libs)

commons-collections:commons-collections (v3)

Direct dependency replaced by commons-collections4. Note: v3 (3.2.2) is still on the runtime classpath transitively (pulled in via commons-beanutils:1.11.0). Direct imports of org.apache.commons.collections.* continue to compile and run, but should be migrated to collections4 because the transitive path is fragile and may disappear in future upgrades.

net.bytebuddy:byte-buddy (explicit)

Managed transitively

com.mchange:c3p0

Direct dependency removed from pricefx-integration. Note: still on the runtime classpath transitively (com.mchange:c3p0:0.12.0) via org.apache.camel:camel-quartz:4.18.1. Customer Groovy code that imports com.mchange.v2.c3p0.* continues to resolve in IM 7.3.0, but the transitive path is fragile and may disappear in future Camel/Quartz upgrades — migrate proactively to HikariCP (the Spring Boot default).

com.google.code.maven-replacer-plugin:replacer

javax→jakarta replacement no longer needed

org.apache.maven.wagon:wagon-webdav-jackrabbit (in pricefx-client)

Repository management consolidated

jackson-datatype-jsr310 (explicit in pricefx-integration)

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, TreeMap now implement SequencedCollection/SequencedMap interfaces. New methods getFirst(), 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-opens flags may be needed for libraries that reflectively access JDK internals (Lombok, etc.).

  • Pattern matching for switch and record patterns: Available for use. Not breaking.

  • Deprecation removals: Thread.stop(), Runtime.exec(String) overloads with single-string command, Finalization marked for removal.

  • -XX:+UseCompactObjectHeaders: New experimental JVM option for reduced memory footprint.

  • UTF-8 by default: System.out and System.err default to UTF-8 encoding on all platforms (since Java 18). Previously platform-dependent.

IM Impact (Applied in Branch)

  • pom.xml property <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 from amazoncorretto:17-al2-jdk to cregistry.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-opens for 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-plugin configured 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.cert package (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-bootstrap is no longer needed and has been removed.

  • All bootstrap.yml / bootstrap.yaml / bootstrap.properties files 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: The Supplier<Flux<Message>> pattern for event publishing is no longer the recommended approach.

  • spring.cloud.function.definition property removed from defaults — Spring Cloud Stream 4.x auto-detects functions.

  • spring.cloud.stream.function.autodetect property introduced to control this.

  • Auto-configuration exclusion list expanded: BindingServiceConfiguration added alongside FunctionConfiguration when 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.yml files 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-bootstrap dependency removed, replaced with spring-cloud-starter-config.

  • RabbitMQOutputAutoConfiguration completely rewritten:

    • Old: Supplier<Flux<Message<String>>> bean pattern with ImInternalEventsChannel callback + Reactor Flux.

    • New: StreamBridge.send(OUTPUT_BINDING, message) — simpler, imperative approach.

    • Removed Flux, reactor.core.publisher, @AllArgsConstructor from this class.

  • PfxInitListener enhanced with improved event-driven configuration logic:

    • New configureEventDriven() method.

    • Added BindingServiceConfiguration to auto-config exclusions.

    • Added spring.cloud.stream.function.autodetect=false when MQ is disabled.

    • Logs property sources at startup for debugging.

  • spring.cloud.function.definition=imInternalEventsSupplier removed from default-application.properties.

  • Test application.properties includes spring.config.import=optional:configserver:.

  • .gitlab-ci.yml release script no longer updates bootstrap.yml labels.



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 an Integer is 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:

XML
<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

  • NamingStrategy with 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_LOCATION defaults to false (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() and canSerialize() deprecated (2.18).

  • jackson-datatype-threetenbp updated to 2.18.2 in pricefx-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 default NoIvGenerator no longer works → EncryptionOperationNotPossibleException on decrypt.

  • BC 1.81+: Backward compatibility restored. NoIvGenerator works 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:

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)

org.apache.http.client.HttpClient

org.apache.hc.client5.http.classic.HttpClient

org.apache.http.client.methods.HttpGet

org.apache.hc.client5.http.classic.methods.HttpGet

org.apache.http.client.methods.HttpPost

org.apache.hc.client5.http.classic.methods.HttpPost

org.apache.http.impl.client.CloseableHttpClient

org.apache.hc.client5.http.impl.classic.CloseableHttpClient

org.apache.http.impl.client.HttpClients

org.apache.hc.client5.http.impl.classic.HttpClients

org.apache.http.util.EntityUtils

org.apache.hc.core5.http.io.entity.EntityUtils

IM Impact

  • Managed transitively by Spring Boot. Explicit httpclient5:5.1.4 dependency and exclusion from spring-cloud-config-client removed.

  • 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: MEDIUMPackage change: org.apache.commons.collectionsorg.apache.commons.collections4.

IM Impact (current state on feature/PFIMCORE-2956) — migration is partial:

  • Direct commons-collections v3 dependency declarations removed from POMs (commons-collections4 is the declared dep).

  • v3 jar (3.2.2) is still on the runtime classpath transitively via commons-beanutils:1.11.0.

  • ~18 source files in pricefx-integration/src/main/java still import org.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 collections4 is tracked as a GAP (see Section 15).

Target state — fully migrated imports look like:

Java
// 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

angus-mail.version

2.0.5

commons-compress.version

1.28.0

commons-csv.version

1.14.1

commons-io.version

2.21.0

commons-lang3.version

3.20.0

cxf.version

4.1.5

groovy.version

4.0.30

guava.version

33.5.0-jre

jackson.version

2.19.4

jolokia.version

2.5.0

mockito.version

5.21.0

spock-core.version

2.4-groovy-4.0

spring-boot.version

3.5.12

vavr.version

1.0.0

wiremock.version

3.13.2

Project-Specific Versions

Property

Version

aspectj.version

1.9.25.1

aws.version

2.42.13

groovy-sandbox.version

1.19+pricefx-20240201

jasypt-spring-boot.version

4.0.4

jsqlparser.version

5.3

juniversalchardet.version

2.5.0

logstash-logback-encoder.version

8.0

lombok.version

1.18.44

methanol.version

1.8.4

ojdbc.version

11.2.0.4

reflections.version

0.10.2

spock-outputcapture.version

2.2.0

spring-cloud.version

2025.0.1

xom.version

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

spring-boot-starter-tomcat

Reactor Core

3.7.17

spring-integration-core

Reactor Netty

1.2.16

spring-boot-starter-webflux

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

cxf-rt-transports-http-jetty:4.1.5, camel-jetty:4.18.1 (see §19A)

Vert.x

4.5.14

kubernetes-httpclient-vertx (Fabric8)

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 pricefx-integration (no version property)

BouncyCastle (bcprov-jdk18on)

1.83

direct dep (pinned) + transitive via camel-ssh (see §3.4 / §8)

WSS4J

4.0.1

cxf-rt-ws-security (see §19B)

OpenSAML

5.1.6

WSS4J

Shibboleth (shib-*)

9.1.6

OpenSAML

Apache Santuario (xmlsec)

4.0.4

WSS4J

Ehcache (jakarta)

3.10.9

WSS4J

OpenTelemetry

1.49.0

google-cloud-storage

Prometheus metrics client

1.3.10

micrometer-registry-prometheus:1.15.10 (replaces deprecated simpleclient:0.16.0 — see §19C)

Apache Velocity

2.4.1

camel-velocity

Quartz Scheduler

2.5.2

camel-quartz

commons-collections v3

3.2.2 (transitive only)

commons-beanutils:1.11.0 (pulled by im-git-server-git-logicim-git-server-api)