// Creation
JsonMapper mapper = JsonMapper.builder()
.configure(...)
.build();
// Subsequent modification
mapper = mapper.rebuild()
.configure(...)
.build();
Release Notes
This section documents changes introduced since release 26.1.0.
26.7.2
Dependency Updates
The following dependency versions have been updated:
| Dependency | Version |
|---|---|
Faktor Zehn Commons |
26.7.2 |
ICS Core |
26.7.1 |
Linkki |
2.10.1 |
26.7.1
Dependency Updates
No dependencies were updated in this version.
Fixed Bugs
AccountInfoTool Now Stays in Sync With the Policy View (PNC-3894)
The AccountInfoTool now refreshes automatically as you move through policy versions, so it always matches what’s currently on screen.
Previously it loaded only once, which could leave stale details being displayed.
For example, when switching between policy versions with a policyholder change.
To benefit from this improvement use the new method AccountInfoToolCreator.create(Supplier<String>, Supplier<String>, FscdAdapterClient, Supplier<String>, BindingManager) for creating the AccountInfoTool.
26.7.0
Dependency Updates
The following dependency versions have been updated:
| Dependency | Version |
|---|---|
Faktor Zehn Commons |
26.7.1 |
Flow |
26.7.0 |
IPM Core |
26.7.0 |
ICS Core |
26.7.0 |
ICO |
26.7.0 |
Linkki |
2.10.0 |
Upgrade to Vaadin 25 and Spring Boot 4 (PNC-3121)
The FS-CD Adapter sample application has been upgraded to Vaadin 25 and Spring Boot 4. Please consider the migration guides of the upstream frameworks: Spring Boot, linkki, Vaadin.
The following breaking changes have been applied in the reference project and are relevant for implementation projects:
Jackson 3
As part of the upgrade to Spring Boot 4, Jackson has been updated from version 2 to version 3. Jackson 3 changes several default values as well as the module structure.
Changes in Module Structure and Configuration
-
All Jackson dependencies have been migrated to the Jackson 3 group IDs:
com.fasterxml.jackson.*→tools.jackson.* -
The configuration
spring.jackson.serialization.write-dates-as-timestamps: falsecan be removed, as this is now the default behavior in Jackson 3.
Changed API: JsonMapper Replaces ObjectMapper
The class JsonMapper replaces ObjectMapper.
Mapper instances in Jackson 3 are immutable and can either be configured during creation via JsonMapper.Builder or modified afterwards via an explicit rebuild() + build():
As a result:
* ObjectMapper has been replaced by JsonMapper.
* JsonMessageConverter has been replaced by JacksonJsonMessageConverter.
* Models in module de.faktorzehn.fscdadapter.extapi have been annotated with @Jacksonized
Changed Default Behavior of JsonMapper
The default behavior of JsonMapper has changed.
If deserialization fails as a result, the previous behavior can be restored via properties in application.yml:
spring:
jackson:
mapper:
allow-final-fields-as-mutators: true
use-getters-as-setters: true
allow-final-fields-as-mutators-
Allows Jackson to treat final fields as mutable properties. In Jackson 3, this behavior is disabled by default.
use-getters-as-setters-
Allows Jackson to use getter methods as implicit setters (e.g. for collections). In Jackson 3, this behavior is also disabled by default.
Required Changes in Tests
In tests, the JsonMapper is not automatically configured with the application configuration from application.yml.
Mapper instances that require these features and are created directly in tests must be configured manually via the builder:
JsonMapper mapper = JsonMapper.builder()
.enable(MapperFeature.ALLOW_FINAL_FIELDS_AS_MUTATORS)
.enable(MapperFeature.USE_GETTERS_AS_SETTERS)
.build();
@StyleSheet Replaces @Theme in Sample WebApp
The Vaadin @Theme annotation has been replaced by @StyleSheet("context://…") in
FscdAdapterWebApp.
In addition, classes annotated with @StyleSheet must be included in the @EnableVaadin package scan.
Spring Boot Starter Dependency Renamed
The artifact spring-boot-starter-web has been renamed to spring-boot-starter-webmvc, direct dependencies have been updated accordingly.
New Features and Improvements
Configurable Kafka Listener Topics with Multi-Topic Support (PNC-2917, PNC-3354)
The Kafka event listeners for IPM policy editing events and ICS claim events are now configurable via application properties instead of hardcoded topic names. Additionally, each listener now supports consuming from multiple topics simultaneously.
The following listeners are now configurable and support multiple topics:
-
IPM Policy Editing Listeners:
IbPolicyEditingEventListenerandVbPolicyEditingEventListener -
IPM Policyholder Change Listeners:
IbPolicyholderChangeEventListenerandVbPolicyholderChangeEventListener[new feature] -
ICS Claim Payment Listener:
ClaimPaymentEventListener -
ICS Failed Payment Listener:
FailedPaymentEventListener -
ICS Payment Returned Listener:
PaymentReturnedEventListener -
ICS Receivable Listener:
ReceivableEventListener -
ICS Reserve Change Listener:
ReserveChangeEventListener
Configuration Example:
To configure multiple topics for a listener, provide a comma-separated list of topic names without spaces:
fscd-adapter:
policy-editing:
base:
topics: "de.faktorzehn.ipm.event.editing-finished,de.faktorzehn.ipm.event.editing-finished-v2"
claim-payment:
topics: "de.faktorzehn.ics.event.payment-transferred,de.faktorzehn.ics.event.payment-transferred-backup"
Breaking Change for IPM Policy Editing Listeners:
The following property names have changed:
| Listener | Old Property Name | New Property Name |
|---|---|---|
|
|
|
For the VbPolicyEditingEventListener, the following new configuration property is available:
-
fscd-adapter.policy-editing.basis.topics(default:de.faktorzehn.ipm.event.editing-finished)
For ICS listeners, the following new configuration properties are available:
-
fscd-adapter.claim-payment.topics(default:de.faktorzehn.ics.event.payment-transferred) -
fscd-adapter.failed-payment.topics(default:de.faktorzehn.ics.event.payment-failed) -
fscd-adapter.payment-returned.topics(default:de.faktorzehn.fscd.event.payment-returned) -
fscd-adapter.receivable.topics(default:de.faktorzehn.ics.event.receivable-transferred) -
fscd-adapter.reserve-change.topics(default:de.faktorzehn.ics.event.reserve-changed)
If no custom configuration is provided, the listeners use the default topics shown above.
Condensed Client for Sample ICS Integration (PNC-3293)
The clients ClaimPaymentInfoClient, PaymentUpdateClient, ReceivableInfoClient, ReserveChangeInfoClient have been replaced with a new IcsClient (and a IcsClientCreator used to create said client).
The new client is used for all supported integrations with ICS.
Breaking Change:
As a result the properties required for client registration:
-
f10-commons.rest.client.reserve-change-service -
f10-commons.rest.client.claim-payment-service -
f10-commons.rest.client.receivable-service -
f10-commons.rest.client.payment-update-service
These have been entirely replaced with the new property:
-
f10-commons.rest.client.ics-service
Rename Default Topic for Payment Returned Event (PNC-3362)
The default topic for the property fscd-adapter.payment-returned.topics has been renamed from de.faktorzehn.fscd.payment-returned to de.faktorzehn.fscd.event.payment-returned.
Introduce Ib/VbPolicyholderChangeEventListener To Process Policyholder Changes (PNC-2946)
A new event listener IbPolicyholderChangeEventListener (and VbPolicyholderChangeEventListener respectively) has been introduced to the sample project, they receive and process version-becoming-effective events in order to propagate policyholder changes to FS-CD (also see the new service and the documentation section integration layer).
Breaking Change for IPM Policy Editing Listeners:
The mapping property name has changed as it is now shared by the Ib/VbPolicyEditingEventListener and the Ib/VbPolicyholderChangeEventListener.
| Old Property Name | New Property Name |
|---|---|
|
|
Change Policyholder Service (PNC-3256)
A new service FscdChangePolicyholderService has been introduced to change the policyholder of a contract in FS-CD.
The service calls the SAP function module FSCD_CPH_PROCESS and transfers open items that are due after a given effective date from the old to the new policyholder.
A new REST endpoint is now available:
-
POST /change-policyholder
The FscdAdapterClient has been extended with a corresponding method changePolicyholder(PolicyholderChange).
Payment Returned Processing Uses External Return Reason Code (PNC-3320)
The return reason mapping via fscd-adapter.payment-returned.return-reasons is now optional.
If not configured, the PaymentReturnedProcessor uses the external return reason code (RLHBK) from the SAP FS-CD InfoContainer directly as the ICS payment failure type.
See Payment Returned Processing for details.
Breaking changes to PaymentReturnedInfoContainer:
-
New required field
externalReturnReasonCode(RLHBK) inAdditionalInfo -
Field
returnReasonCodeinReturnReasonrenamed tointernalReturnReasonCode -
Field
claimNumberis deserialized withLeadingZeroTrimmingDeserializer
Alternative Correspondence Recipients via IT_PARCORR (PNC-3111)
Alternative correspondence recipients are now transferred to FS-CD using the IT_PARCORR table parameter in FSCD_INSOBJECT_MAINTAIN instead of the single IS_IOBPAR.DEF_REC field.
This enables multiple alternative correspondence recipients per insurance object.
The ICS receivable sample mapper now transfers the debtor (Forderungsgegner) as an alternative correspondence recipient when the debtor differs from the policyholder.
Breaking Change:
The field alternativeCorrespondenceRecipientNo (String) on InsuranceObject has been replaced with alternativeCorrespondenceRecipients (List<String>).
| Before | After |
|---|---|
|
|
Tax Code Transfer for Claim Payments (PNC-3143)
The ClaimPaymentPostingsMapper now reads the tax code from ICS claim payment items (PaymentItemInformationDto.taxCode), maps it to the corresponding FS-CD tax code indicator using configurable property mappings, and passes it to the posting field MWSKZ in SAP FS-CD.
Tax code mappings are configured via the property fscd-adapter.claim-payment.mapping.tax-codes.
Tax codes are optional — if no tax code is present on the payment item, the field is left empty in the posting.
Update DueDate Mapping in Receivable Postings (PNC-3427)
The ReceivablePostingsMapper now maps the dueDate from the receivable information instead of always using today’s date.
If the due date is in the past or absent, today’s date is used as a fallback.
Domain-Based Position Number for Policy Editing Postings (PNC-3055)
PostingDto.getId() now returns a domain-based postingId instead of the internal database sequence ID.
The position number (POSNR) used for policy editing postings in FS-CD is derived from
PostingDto.getId(), so it now carries the domain-based postingId.
IPM Core migrates existing posting IDs as part of the upgrade, so idempotency continues to work correctly and no special action is required before upgrading.
Updated Sample Tenant Configuration (PNC-3052)
The sample tenant name for tenant ID C has changed from ConVista Holding GmbH to Convista Group.
Implementation projects that configure tenant names via domain_*.properties files should update the value accordingly:
The legacy numeric tenant IDs 1 and 2 are kept for backward compatibility with existing SAP data.
Group Policy Editing Postings by Due Date (PNC-3672)
The IbPolicyEditingEventListener and VbPolicyEditingEventListener now group postings by their due date and load the policy version valid on each due date before transferring postings to FS-CD.
Previously, a single policy version (valid at the editing’s finish date) was used for all postings, regardless of their individual due dates. This caused postings to be assigned to the wrong insurance object when the policyholder changed between due dates — for example, when an editing spans a future policyholder change.
For each distinct due date, the adapter now:
-
reads the policy version valid on that date (
GET /policies/{policyNo}/versions?validAt={dueDate}) -
creates or updates the insurance object for the policyholder of that version
-
transfers the postings belonging to that due date
If a policy editing contains no postings, the adapter still updates the insurance object using the policy version valid at the editing’s finish date.