Appendix — Internal / IM Framework Details (Part 2: §20+)
Parent doc:
upgrade-migration-guide-to-im-7-3-0.md
Confluence mirror: IM 7.2 → 7.3.0 — Appendix — Internal / IM Framework Details (Part 2: §20+)
Internal-only — IM framework developer reference. Customer integrators can skip this section.
20. Vavr 0.9.3 → 1.0.0
Impact: MEDIUM-HIGH | Type: API
20.1 Migration Path: 0.9.3 → 0.10.x → 0.11.0 → 1.0.0
Research reveals the upgrade path is smoother than the major version suggests:
-
0.10.0 is "fully backward compatible to 0.9.3" per Vavr documentation.
-
0.10.5: Full JPMS support, replaced
synchronizedwith reentrant locks (virtual thread friendly). -
0.11.0: Only removal is experimental
TaskAPI. New additions:Either/Validation.cond(),Value.mapTo(),Try.toEither(Throwable -> L). -
1.0.0 is "a version bump and nothing more" — drop-in replacement for 0.11.0.
-
1.0.1: Fixes
HashMapserialization bug across JVM restarts (enums usingObject.hashCode()).
|
Area |
Change |
Impact for IM |
|---|---|---|
|
|
API fully compatible — |
LOW |
|
|
API fully compatible |
LOW |
|
|
API fully compatible |
LOW |
|
|
|
LOW |
|
|
|
LOW |
|
Collections |
No breaking changes for IM patterns |
LOW |
|
Package |
Remains |
LOW |
20.2 IM Usage Patterns (from codebase scan)
Vavr is used extensively:
-
Converter classes:
Try.of(() -> ...).getOrElseThrow()(StringToDecimal, StringToInteger, etc.) -
Connection handling:
Try.of()with fallback -
MapperConfigurationService:
OptionwithMatch/Casepattern matching -
EventsRepository:
static io.vavr.API.$,Case,Matchimports -
API actions:
Tuple2in DMMassEdit, MPLCalculate, MPLIntegrateItems -
Security:
Tuple2<RequestMatcher, AuthenticationManager>in authentication resolver
IM Impact (Applied in Branch)
-
No Vavr-specific code changes visible in the diff — the upgrade appears API-compatible for IM's usage patterns.
-
Risk: Vavr 1.0.0 may have subtle behavioral changes. Thorough testing of all converter classes and Match/Case patterns is critical.
21. JSqlParser 1.1 → 5.3
Impact: HIGH | Type: Complete API rewrite
21.1 Package Relocations / Removals
|
Old Class |
New / Status |
Notes |
|---|---|---|
|
|
Merged into |
|
|
|
|
Consolidated |
|
|
Removed |
Use |
|
|
Changed |
Different API |
|
|
Removed |
Use |
|
|
Changed |
Use |
|
|
Changed |
Use |
|
|
Constructor changed |
|
|
|
|
Default implementations |
|
Many individual |
Removed from visitor |
Consolidated into adapter pattern |
21.2 Visitor Pattern Overhaul
JSqlParser 5.x completely rewrote the visitor pattern:
-
ExpressionVisitor→ExpressionVisitorAdapterwith default no-op implementations -
StatementVisitor→StatementVisitorAdapter -
Many specific statement visit methods removed (e.g.,
visit(Alter),visit(Commit),visit(CreateTable),visit(Delete),visit(Drop),visit(Execute),visit(Insert),visit(Merge),visit(Replace),visit(Truncate),visit(Update),visit(Upsert)) -
ExpressionDeParserconstructor simplified — no longer requiresSelectVisitor
IM Impact (Applied in Branch)
SQLSelectUtils.java — Completely refactored:
// Old (JSqlParser 1.1)
if (statement instanceof Select) {
Select selectStatement = (Select) statement;
PlainSelect plainSelect = (PlainSelect) selectStatement.getSelectBody();
ExpressionDeParser expressionDeParser = new ExpressionDeParser();
StringBuilder stringBuffer = new StringBuilder();
expressionDeParser.setBuffer(stringBuffer);
SelectDeParser deParser = new SelectDeParser(expressionDeParser, stringBuffer);
expressionDeParser.setSelectVisitor(deParser);
...
}
// New (JSqlParser 5.3)
if (statement instanceof PlainSelect plainSelect) {
StringBuilder stringBuffer = new StringBuilder();
SelectDeParser deParser = new SelectDeParser(stringBuffer);
plainSelect.setSelectItems(countSelectItem());
return plainSelect.toString();
}
ISqlExpressionDeParser.java — Major rewrite:
-
Removed 30+ individual
visit()method overrides for statement types. -
Migrated to
StatementVisitorAdapter/ExpressionVisitorAdapterpattern. -
RowConstructorgeneric signatures changed. -
Unsupported expression detection refactored — strips proxy/mock suffixes from class names.
-
All JSqlParser package relocations applied.
22. Apache POI 4.1.2 → 5.5.1
Impact: HIGH | Type: API, Behavior
22.1 Breaking Changes
|
Change |
Impact |
|---|---|
|
|
Cannot use try-catch pattern for XLS/XLSX detection |
|
Stream closed on constructor failure in POI 5.x |
|
|
|
Must use |
|
|
Use |
|
Alignment/fill constants replaced |
|
|
|
Artifact change |
|
|
Package relocation (monitorjbl abandoned, pjfanning is maintained fork) |
|
|
Package relocation |
|
|
New API for detecting XLS vs XLSX |
22.2 Excel Format Detection Pattern Change
Before (POI 4.x):
public Workbook resolveWorkbookType(InputStream input) throws IOException {
try {
return new XSSFWorkbook(input);
} catch (OLE2NotOfficeXmlFileException e) {
return new HSSFWorkbook(input);
}
}
After (POI 5.x):
public Workbook resolveWorkbookType(InputStream input) throws IOException {
InputStream buffered = FileMagic.prepareToCheckMagic(input);
FileMagic magic = FileMagic.valueOf(buffered);
if (magic == FileMagic.OOXML) {
return new XSSFWorkbook(buffered);
}
return new HSSFWorkbook(buffered);
}
IM Impact (Applied in Branch)
-
PfxExcelFormat.resolveWorkbookType()— Completely rewritten usingFileMagic. -
All
StreamingReaderimports changed (com.monitorjbl→com.github.pjfanning) across 6 files:-
PfxExcelPreviewParser.java -
PfxExcelStreamingUnmarshal.java -
XlsxDataloadPreviewParser.java -
ValidateFileProcessor.java -
DataloadFileProcessor.java -
IoListFiles.java
-
-
OLE2NotOfficeXmlFileExceptionimport removed, replaced withFileMagic.
23. Fabric8 Kubernetes Client 6.13.4 → 7.6.1
Impact: MEDIUM | Type: API
Key Breaking Changes in 7.x
-
Default HTTP client changed from OkHttp to Vert.x. To keep OkHttp behavior, add
kubernetes-httpclient-okhttpand exclude Vert.x. -
Config#getKubeconfigFilename()renamed togetKubeconfigFilenames()(returns collection). -
Default Pod readiness wait timeout changed from 5s to 0s. Use
withReadyWaitTimeout(5000)to restore. -
Removed:
kubernetes-modelartifact,openshift-server-mockmodule,SupportTestingClientinterface,Config.errorMessages. -
Client builder API:
KubernetesClientBuildermethod signatures changed. -
Configuration: Some configuration methods renamed/removed.
-
Resource API:
Resourceinterface methods changed. -
BouncyCastle no longer needed for Kubernetes client.
IM Impact
-
Used in
pricefx-integrationmodule for Kubernetes operations (ConfigMapWatcherTaskSource.java,ContextWatcherAutoConfiguration.java). UseskubernetesClient.configMaps().inNamespace().withLabel().list()pattern. -
Version bumped in POM. HTTP client change and API renames need validation.
24. Jersey (JAX-RS) / Codegen Plugin
Impact: HIGH | Type: API (generated code)
Jersey Version Management
-
Versions now managed by Spring Boot BOM — no explicit version declarations.
-
jakarta.jws-apidependency removed. -
jersey-media-jaxbadded as explicit dependency.
Codegen Plugin 4.0.0 → 5.0.0
invokeAPI() method signature changed from 10 to 13 parameters:
|
Parameter |
Old |
New |
|---|---|---|
|
operation |
|
|
|
path |
|
|
|
method |
|
|
|
queryParams |
|
|
|
body |
|
|
|
headerParams |
|
|
|
cookieParams |
|
|
|
formParams |
|
|
|
accept |
|
|
|
contentType |
|
|
|
authNames |
|
|
|
returnType |
|
|
|
isBodyNullable |
|
|
Other Codegen Changes
-
library=jersey2configuration removed from plugin config (now default). -
javax.annotation→jakarta.annotationreplacer plugin deleted — codegen generates Jakarta natively. -
API spec updated to
api-2026-03-19-sorted.json.
IM Impact (Applied in Branch)
-
All
invokeAPI()calls inPriceFxApiClientand test expectations updated to 13-parameter signature. -
setContentLengthForEmptyPost()helper method removed (no longer needed). -
javax.ws.rs.core.GenericTypemoved to string-based Groovy sandbox whitelist (not on compile classpath anymore). -
New classes added to Groovy sandbox:
CustomInstantDeserializer,OAuth,OAuthFlow.
25. Mockito 3.11.2 → 5.21.0
Impact: MEDIUM | Type: Testing API
Breaking Changes
|
Change |
Version |
|---|---|
|
|
5.0 |
|
Java 11+ required |
5.0 |
|
Stricter stubbing by default — |
5.0 |
|
|
5.0 |
|
Inline mock maker is the default |
5.0 |
|
|
5.0 |
IM Impact (Applied in Branch)
-
mockito-coreadded as explicit test dependency inpricefx-client. -
MockitoAnnotationsimport added in some tests.
27. WireMock 3.9.1 → 3.13.2
Impact: MEDIUM | Type: Testing, Artifact
Artifact Change
-
Old:
org.wiremock:wiremockandorg.wiremock:wiremock-jetty12(separate artifacts). -
New:
org.wiremock:wiremock-standalone(single artifact, embeds Jetty).
IM Impact (Applied in Branch)
-
All modules changed from
wiremock/wiremock-jetty12towiremock-standalone. -
im-commons-utilsandim-commons-testsexclusions forwiremock-jetty12removed. -
Various test assertions updated.
28. Jolokia 1.6.2 → 2.5.0
Impact: MEDIUM | Type: API rewrite, artifact rename
Major version bump (1.x → 2.x) with API rewrite. Artifact changed: jolokia-core → jolokia-support-springboot3 for native Spring Boot 3 integration. The /jolokia actuator endpoint stays available; downstream JMX scrapers and monitoring tools may need adjustment for the new agent configuration format and response shape.
29. Eclipse JGit 6.7.0 → 7.5.0
Impact: LOW | Type: API
Major version bump. IM uses JGit only transitively via im-git-server-git-logic — no direct IM code change required.
30. Flyway 9.x → 11.x
Impact: LOW for IM (transitive only) | Type: Major version bump via Spring Boot BOM
Crosses Flyway 10 (Java 17+ baseline) and 11 (group-id org.flywaydb → org.flyway, database-specific modules now required: flyway-database-postgresql, flyway-database-mysql, etc.). IM has no direct Flyway dependency. Customers running their own Flyway migrations alongside IM must add the matching flyway-database-* module and verify Java 17+ baseline.
31. AspectJ 1.9.7 → 1.9.25.1
Impact: MEDIUM (build only) | Type: Maven plugin vendor change
Plugin migrated from abandoned org.codehaus.mojo:aspectj-maven-plugin:1.14.0 to the maintained fork dev.aspectj:aspectj-maven-plugin:1.14 for Java 21 compatibility. Group-id and version changed in parent POM and pricefx-client/pom.xml. Forks of the IM build must update their plugin coordinates accordingly.
32. AWS SDK 2.15.50 → 2.42.13
Impact: MEDIUM | Type: API improvements
Key Changes
-
2.30.0+: Multipart upload calls
ContentStreamProvider::newStream()twice — breaks code assuming single call. -
2.30.1+: Content-length error with explicit
contentLengthin multipart PUT via transfer manager. -
2.21.16+: Presigned URL signature changed with
endpointOverride+ HTTP address (breaks MinIO). -
S3 client improvements (chunked upload, multipart).
-
Credential provider patterns updated.
IM Impact (Applied in Branch)
-
PfxS3ITtest assertion fixed for chunked S3 upload behavior change.
35. Lombok 1.18.30 → 1.18.44
Impact: LOW-MEDIUM | Type: Compilation, Behavior
-
Java 21 compatibility. Requires
--add-opensJVM arguments for annotation processing (added to maven-compiler-plugin). -
BREAKING (1.18.38+): Lombok stopped automatically copying Jackson annotations (
@JsonProperty,@JsonIgnore, etc.) from fields to generated accessors. If IM relies on this, restore withlombok.copyJacksonAnnotationsToAccessors = trueinlombok.config.
36. Logstash Logback Encoder / Logback / SLF4J
Impact: MEDIUM | Type: Configuration
Changes (verified against git diff v7.2.0..v7.3.0)
-
integration-logging/src/main/resources/logback-spring.xmlwas rewritten (was a 6-line shell that included three external appender XMLs; now ~109 lines with appender configuration inlined and conditional blocks for cloud-logging / logstash / debug). New<contextListener>for the audit prop listener and<springProperty>bindings forLOGSTASH_ENABLED,CLOUD_LOGGING,LOGBACK_DEBUG. -
integration-apps/integration-runner-app/src/main/resources/logback.xmlis new in v7.3.0 (105 lines) — runner-specific logback config. -
integration-logging/src/main/resources/logback-cloud.xmlis new in v7.3.0 — cloud-logging appender pulled out of the previous shell include. -
integration-logging/src/main/resources/net/pricefx/integration/logging/logstash-appender.xml: gaineddefaultValue="5 minutes"onKEEP_ALIVE_DURATION(safety for unset config). -
Conditional blocks (
<if>) require thejaninodependency, added to theintegration-loggingmodule. -
logback-classicexplicit dependency removed fromintegration-api(now managed by Spring Boot). -
XML resource filtering explicitly disabled for
*.xmlfiles inintegration-apps/integration-runner-appto prevent Maven from mangling logback config.
37. Build Tooling Changes
Maven Plugins Updated
|
Plugin |
Old Version |
New Version |
Notes |
|---|---|---|---|
|
|
3.13.0 |
3.15.0 |
|
|
|
3.0.2 |
3.4.0 |
|
|
|
2.22.2 |
3.5.4 |
Major — uses JUnit Platform by default |
|
|
2.22.2 |
3.5.4 |
Major — uses JUnit Platform by default |
|
|
3.2.x |
3.4.0 |
Centralized in parent POM |
|
|
3.3.0 |
3.10.0 |
|
|
|
3.0.0 |
3.6.0 |
|
|
|
8.12 |
10.24.0 |
Major — new rules, Java 17+ syntax |
|
|
0.8.10 |
0.8.14 |
|
|
|
1.13.1 |
4.2.1 |
Major — requires explicit goals and targetBytecode |
|
|
3.7.0.1746 |
5.5.0.6356 |
|
|
|
2.7.1 |
2.9.1 |
|
|
|
3.2.0 |
3.5.3 |
|
|
|
1.14.0 (codehaus) |
1.14 (dev.aspectj) |
Group change |
Surefire/Failsafe 2.x → 3.x Impact
-
Uses JUnit Platform by default for test discovery.
-
junit-platform-launcherdependency added. -
--fail-at-endadded to CI test commands.
GmavenPlus 1.x → 4.x Impact
-
<targetBytecode>21</targetBytecode>configuration required. -
Goals must be explicitly listed in executions.
Checkstyle 8.12 → 10.24.0 Impact
-
Many new rules enabled by default.
-
Java 17+ syntax support.
-
May flag new violations in existing code.
38. Migration Tools
Camel Upgrade Recipes (OpenRewrite)
Apache provides automated migration recipes:
mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.apache.camel.upgrade:camel-upgrade-recipes:LATEST \
-DactiveRecipes=org.apache.camel.upgrade.CamelMigrationRecipe
This assists with (but does NOT fully automate) Camel property renames, DSL changes, and component migrations. Manual review is required.
Spring Boot Properties Migrator
Add temporarily during migration to get runtime warnings about deprecated properties:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
Remove after migration is verified.