English Documentation
Release Notes
Version 25.7.0
Faktor-IPS 25.7 requires Java 21 for the Eclipse plugin as well as for the runtime library.
JAXB Adapter for Custom Datatypes
When defining a datatype in the .ipsproject
file, you can now use the jaxbXmlJavaTypeAdapterClass
attribute to define an`XmlAdapter` class that will be generated with an @XmlJavaTypeAdapter
annotation on fields using that datatype.
External Internationalization of Multi-Language Strings
String attributes marked as multilingual can now be translated to additional languages not only via the product configuration but also via i18n.properties
files.
To do this, place a (or multiple) i18n_<language>.properties
file(s) in the same package as the product component’s class' model-label-and-descriptions_<language>.properties
file(s) (the package is noted in the product component type’s @IpsDocumented
annotation).
In these files, properties use keys like <runtime ID of the product component, replacing ' ' with '_'>.<attribute name>
.
For multilingual multi-value attributes, the key can be extended with a 0-based index, following the pattern <runtime ID>.<attribute name>.<index>
.
Enum contents can be translated with the same mechanism by using a key following the pattern <qualified name of the content>.<attribute name>.<value of the ID attribute>
.
Values defined in Enum types were already translatable with .properties files named like the types and using keys like <attribute name>_<value of the ID attribute>
.
Default Implementation for areValuesEqual()
in IDeltaComputationOptions
A default implementation for areValuesEqual()
in IDeltaComputationOptions
has been added, which treats null
and empty/blank strings as equal. This eliminates the need for repeated implementation in individual subclasses.
Serializable Default Implementation for IRuntimeRepositoryLookup
To make a ClassloaderRuntimeRepository
serializable, you now just need to call its withLookup()
method. More details in the Javadoc and the (German) documentation at "Serialization & IRuntimeRepositoryLookup".
API-Changes
Generated Code
-
The
user-code
block for overwritten validation rules now covers a smaller piece of code. This allows the call to thesuper
method and the finding and removal of the oldMessage
to happen outside, so that inside the block only custom checks and parameter assignments have to be implemented.-
For existing code, this means there may now be some duplicated code (previously handwritten inside the block, now generated outside), which has to be manually cleaned up.
-
-
Table classes are now generated as
final
. Faktor-IPS does not allow subclassing of tables and the call chain →init()
→initKeyMaps()
/performAdditionalInitializations()
was correctly marked as "possible this-escape" by the Java 21 compiler for non-final classes. -
The fields in the internal
SerializationProxy
classes of enums are now generated with@generated
Javadoc tags for new classes so that they are now generated differently after changes to the enum model, like a changed datatype for the ID attribute. For existingSerializationProxy
classes,@generated
is unfortunately not created, because JMerge interprets the missing Javadocs as@generated NOT
. You may add the Javadoc manually or delete the SerializationProxies and let them be generated anew. -
Java methods generated for ProductCmptType methods are no longer documented with
{@inheritDoc}
when not overriding or implementing anything. -
Hidden attributes and associations are now marked with
"hide"
in the@Ipsattribute
/Association
annotation -
The migration to Faktor-IPS 25.7, besides writing the updated XML schema references in all files, also adds a line to the
MANIFEST.MF
, to include the runtime ID prefix. -
The initialization code for default values of extensible enum attributes with primitive IDs was fixed
Runtime
-
All runtime model-type setter methods with
IProductComponent
andCalendar
as parameters have been overloaded with a variant that instead usesIProductComponentGeneration
to set values. This includes setDefaultValue/setValueSet methods for all (Policy/Product)Attributes, TableUsage#setName and Formula#setFormulaText:-
Attribute#setDefaultValue(IProductComponentGeneration target, Object defaultValue)
-
Attribute#setValueSet(IProductComponentGeneration target, Object defaultValue)
-
TableUsage#setTableName(String tableName, IProductComponentGeneration generation)
-
Formula#setFormulaText(IProductComponentGeneration generation, String formulaText)
-
-
Added new default implementation for
areValuesEqual(Class<?> clazz, String property, Object value1, Object value2)
inIDeltaComputationOptions
that treatsnull
and empty strings as equal
Compatibility
Older Versions of Faktor-IPS
Due to the change to Java 21, Faktor-IPs 25.7 is not compatible with older versions of Faktor-IPS.
Java
-
The Design-Time (Eclipse-Plugin) requires at least Java 21.
-
The runtime requires at least Java 21. (A migration for EclipseLink is necessary. See the migration section for more information.)
Eclipse
The design time Eclipse plugin requires at least Eclipse 2023-12*and has been tested with that version and all following versions up to and including Eclipse 2025-06.
As Eclipse versions before 2024-06 do not include Java 21, installation and use of Faktor-IPS require a current JRE. It is important to also update the JustJ plugin included in Eclipse.
We recommend using Eclipse 2025-06.
Eclipse 2025-03 has a bug in its internal Java compiler, showing errors where there shouldn’t be any in some constellations, such as in a call to IRuntimeRepository.getExistingEnumValue(Class<T>, Object) with a combination of null and a primitive value for the ID (e.g., IpsStringUtils.isEmpty(columnValue) ? null : Integer.parseInt(columnValue) ). This bug will only be fixed in Eclipse 2025-06.
|
Migration
The migration to Faktor-IPS 25.7, besides writing the updated XML schema references in all files, also adds a line to the MANIFEST.MF
, to include the runtime ID prefix.
As Eclipse versions before 2024-06 do not contain Java 21, installing and running Faktor-IPS with those versions requires an updated JRE.
EclipseLink Version 3.0.2 is not compatible with Java 21. Therefore, updating the EclipseLink dependency to at least 3.0.4 is required to use the runtime with Java 21. |
Fixed Bugs
-
GIT branch change via console leads to problems in FIPS/Eclipse build
-
Refactoring/renaming of table content leads to exception
-
NullPointerException when trying to migrate a project with IpsNature but without .ipsproject
-
DefaultRange.isUnrestricted() does not handle NullObject
-
Fields in SerializationProxy should be @generated
-
Missing import for generated validator classes with super class from different package
-
Relevance always generates a virtual OrderedValueSet
-
Initialization of default value null for enum-typed attribute with int id throws NumberFormatException
-
Overwriting rules leads to duplicate calls & incomplete generated code
-
Incorrect nullValue validation in DefaultPolicyAttribute
-
Runtime range validation for primitive data types is too lax
-
cvc-complex-type error in
.ipstestcase(type)
-
If the same target is linked in multiple associations, it is sometimes deleted from the wrong association.
-
Relevance::asValueSet
–range&enum
in incorrect order. -
Wrong ObjectProperties when using validator classes
-
String length value sets in products based on templates are now correctly validated.
-
The XSD schema for test classes and cases was fixed. Parameters were previously only allowed in a specific order.
-
Changes to the order of enum type values are not reflected in the generated Java enums
-
When deleting a template, it is now also removed from all product components and other templates using it. This can be adapted on the preview page of the Delete dialog.
-
When overwriting validation rules, the generated code contained bugs. More under API Changes - Generated Code.
-
Treat null and NullObjects the same when checking whether a range is unlimited
-
Use actual model object in object-only message properties created in validator classes
-
Do not adopt @inheritDoc for target methods of @generated REDIRECT
-
Copy-Wizard Settings Im-/Export logs Exception when closing dialog
-
Typo in validation message for valid-from
-
Error when moving Valid-from date using wizard
-
Archetype uses Java 17 as default
-
NPE in "Open Ips Object in Editor" dialog
-
NPE in DeepCopyWizard
-
Update of commons-beanutils to fix CVE-2025-48734
-
inheritDoc is generated on IPS-Method JavaDoc
-
DeltaComputationOptionsByPosition
now uses the new default implementation ofareValuesEqual
, now treatingnull
and empty strings as equal -
In the dependencies of the
org.faktorips.devtools.model
POM of RC 2 some Eclipse projects were missing -
DeltaComputationOptionsByPosition should not overwrite the new default-areValuesEqual
-
java.util.MissingResourceException in org.faktorips.fl.Messages
-
New PolicyCmptType contains UUIDs
-
When deriving a template, excluded links aren’t set to [0..0]
Additional Functions and Improvement
-
Add setters in Runtime-IpsModel that take IProductComponentGeneration as a parameter. (see also Runtime API-Changes.)
-
DefaultRange#getValues should output values in sorted order
-
repository.eclipse
should point to the releases repository instead of updates. -
Prevent migration from version 23.6 to 24.7 or newer.
-
New
DatabaseLengthValidationUtil
for generic validation of maximum lengths for strings as well as numeric data types such as (Big)Decimal and Double. For more information, see: Database Field-Length Validation -
Wizard for moving the valid-from date
-
Context menu for multiselect of links to set all their cardinalities to the value inherited from a template
-
Enable configuration of XmlJavaTypeAdapter for custom data types
-
Copy-Wizard: save and load settings
-
Runtime product components and table contents need a method to set their descrptions
-
Add "hide" flag to runtime
-
Deletion of a template should not leave errors on products previously derived from it.
-
Multiselect→Use cardinality from template