Core - Changes & Fixes

This page details everything required to get going on IPF Release 2025.3.0

New

IPF Common Starter

Core

  • Added ability to mask sensitive configuration displayed via Spring’s InfoContributor, see Masking Config

Connectors & Transports

  • System events to reflect connector statuses (see System Events)

    • ConnectorStarted

    • ConnectorAvailable

    • ConnectorStopped

    • ConnectorShutdownInitiated

    • ConnectorUnavailable

  • System event to distinguish between a transport being available (existing TransportAvailable) and when it has started processing (new TransportStarted)

  • Added ability to mask sensitive configuration when using the connector-operations-api, see Connector Operations

Bank Filtering Cache

  • Added configuration allowing to disable cache in bank-filtering-parent. By default, cache is enabled, see Cache Config.

Fixed

Changed

Connectors

  • Correlation index creation now supports specifying the custom commit quorum configuration, can be done by providing value for ipf.connector.correlation.commit-quorum property

  • Reworked how connector health is determined with a new connector health event processor utilising connector and transport health system events

    • Having at least one transport UP with a circuit breaker in a CLOSED state will result in a connector reporting UP

  • Added a new configuration property timestamp-archived-and-failed-files that is used in LocalDirectoryConnectorTransport. When set to true, files moved to /archive or /failed directory are automatically timestamped (i.e. file_20251020_143530.xml). The default value is false to preserve existing behavior.

Payment Entries Processor (formerly Payment Releaser)

The following changes were made so the Payments Entries Processor can match warehoused payments against supplied ProcessingEntity:

  • OpenAPI specification updated:

    • All HTTP requests can optionally include a ProcessingEntity in the request body. Enables the matching of warehoused payments against the ProcessingEntity fields. If the ProcessingEntity is not provided in the request body, then no matching logic takes place.

    • All HTTP request bodies are now optional

  • Java interfaces implemented by the PaymentReleaserController updated (generated from the updated OpenAPI specification):

    • the prepareReleaseInstruction method takes Mono<PrepareReleaseInstructionRequest> as an argument

    • the releaseInstruction and releaseTransaction methods no longer take Mono<SupportingContext> as an argument

    • the releaseInstruction and releaseTransaction methods take Mono<ReleaseRequest> as a method argument

  • PaymentEntriesProcessor java interface changes:

    • the prepareInstruction method takes ProcessingEntity as an (optional) method argument

    • the processInstruction method takes ProcessingEntity as an (optional) method argument

    • the processTransaction method takes ProcessingEntity as an (optional) method argument

  • the ExecutionInfo java object (returned by processInstruction and processTransaction methods in the PaymentEntriesProcessor interface) has been refactored:

    • introduction of PaymentHandlingInfo paymentHandlingInfo field

    • movement of the ProcessingActionType actionType and SupportingContext supportingData fields from ExecutionInfo object into PaymentHandlingInfo object.

    • addition of ProcessingEntity processingEntity field to PaymentHandlingInfo object.

  • PaymentDataSource java interface method signatures updated:

    • the getPaymentInitiation, getPaymentInstruction, getPaymentTransactions and getPaymentTransaction methods all required a (nullable) ProcessingEntity method argument

  • the BasePaymentWarehouseDataSource class logic to return a Payment Entry can now match on ProcessingEntity, with logic as follows:

    • if a ProcessingEntity is supplied by the caller, then the ProcessingEntity on the Payment Entry must match to be returned.

    • if a ProcessingEntity is not supplied by the caller, then the ProcessingEntity on the Payment Entry is not taken into consideration.

IPF Common Starter

Core

  • ConnectorsHealthIndicator now uses an aggregate of ConnectorHealth instead of TransportHealth

File Manager

  • FileWriter API write and reactiveWrite methods now return a wrapped WriteResponse object that contains a version string field.

    • For the S3 File Manager, the version represents the versionId of the uploaded S3 file if the S3 bucket has Versioning enabled. If the S3 bucket does not have Versioning enabled, the version field will be null.

    • For the Local File Manager, the version field will be null.

Breaking Changes

Serialization

  • The IPF Akka serializer has been updated to align with the SerializationHelper implementation. The configured Jackson JsonFactory Visibility has changed from ANY to DEFAULT.

    • See com.fasterxml.jackson.annotation.PropertyAccessor and com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility Enum values for more information.

    • The previous setting of ANY meant all fields (including private and protected) are serialized.

    • In particular, this may impact Java fields where one of the first two characters is uppercase (e.g. aFieldName or BFieldName).

      • With FIELD = DEFAULT configured, the above example fields are serialized to afieldName and bfieldName respectively which can cause issues during deserialization.

    • This is a known Jackson issue (fixed in Jackson 3.0), where the advice is to use the @JsonProperty annotation for these fields.

    • If that is not an ideal solution, you can revert to using the previous setting by configuring:

akka.serialization.jackson.ipf-akka-serializer.visibility.FIELD = ANY

Connectors

Transport Message Headers

  • Deprecated ProcessingContext header keys have been removed.

  • Deprecated MessageHeaders.fromProcessingContext() and MessageHeaders.toProcessingContext() methods have been removed

See Migration notes for additional details.

Correlation index creation

  • Name of configuration property ipf.correlation.index-creation.enabled (for enabling/disabling automatic creation of a correlation index) is changed to ipf.connector.correlation.create-indexes

  • Name of configuration property ipf.connector.correlation-timestamp-field-name (for specifying a creation timestamp column name) is changed to ipf.connector.correlation.timestamp-field-name

  • Name of configuration property ipf.connector.correlation-expiry (for specifying a creation timestamp column name) is changed to ipf.connector.correlation.time-to-live

Processing Context

  • Deprecated message header keys uowId, requestId, processingEntity and associationId are removed in favor of keys defined in ContextPropagationSettings class. See Migration notes for additional details.

API

  • ConnectorHealth class no longer contains a list of TransportHealth, it now takes in a String for the connector name

File Manager

  • FileWriter API breaking changes below. See API Reference for details on the WriteResponse object.

    • write method returns CompletionStage<WriteResponse>, previously this returned CompletionStage<Void>

    • reactiveWrite method returns Mono<WriteResponse>, previously this returned Mono<Void>

Kafka Message Logger