Release Notes

v5.26.1 on the GitHub

New Features

An ability to read the *.properties files as a localization bundle is added.

All localization bundles must be stored in the i18n folder inside the OpenL Tablets project.The name of the localization bundle must match the following pattern: Localization bundle files are key-value plain text files. msg(String code, Object... params) function reads a localization message.

A template function for messaging is introduced.

New function is introduced: format(String pattern,String args)

format(“Hello 1 and 2”, “John”, “Hanna”) -> “Hello John and Hanna”

The REST service is added to download an example of with default settings. for OpenL Tablets WebStudio: GET /rest/config/ for OpenL Tablets Rule Services: GET /admin/config/

AspectJ OpenL Profiler is added.

OpenL Rule Service Profiler is a tool that collects the method call statistics from the request execution.

Varargs are added to array functions.

Varargs are supported in the following functions:

  • T[] add(T... elements)
  • T[] add(T[] target, T... elements)
  • T[] addAll(T[]... elements)
  • T[] removeElement(T[] target, T... elements)
  • T[] removeNulls(T... elements)
  • T[] sort(T... elements)
  • Boolean allTrue(Boolean... elements)
  • Boolean anyTrue(Boolean... elements)
  • Boolean allFalse(Boolean... elements)
  • Boolean anyFalse(Boolean... elements)
  • Boolean noNulls(T... elements)
  • T max(T... elements)
  • T min(T... elements)
  • T avg(T... elements)
  • T sum(T... elements)
  • T product(T... elements)

An ability to specify context data in the OpenL Tablets rule as a separate argument is added.

Now context data can be passed as a separate argument.


Core, Rule Services:

  • An error() function is able now to return the error with the error code.
  • error("ERRCD1", "Error Description1") ->{ "code": "ERRCD1", "message": "Error Description1", "type": "USER_ERROR"}


  • The Date() function/constructor and supplementary functions for manipulations with the Date object are introduced.
  • Memory usage in DecisionTableMetaInfoReader is reduced.
  • THB currency support is added.

Rule Services:

  • Automatic deployment of the "classpath:*/openl/*.zip" resources to the repository is added.


  • The index.lock file is deleted on the Git repository initialization during OpenL Tablets WebStudio startup.
  • Deployment repositories are optional now.

Demo, Docker:

  • The Heroku container deployment is now supported.
  • Jetty is updated to version 10. The amount of the used Jetty modules is reduced.

Webstudio, Rule Services:

  • Default fallback values for repeated configurations are supported.

Fixed Bugs


  • The contains(StringRange, String) function cannot be matched to the range starting with zero.
  • An incorrect error and warning messages are displayed for versioned tables if there are input or output parameters of the CustomSpreadsheetResult type.
  • Spreadsheet compilation fails because of the spreadsheet title containing a line break.
  • No error is displayed in a test table referencing the SpreadsheetResult data table in a column of the CustomSpreadsheetResult type.
  • The nearest common type for a 1-dimensional array and a 2-dimensional array is identified as an array of elements of Object type.
  • java.lang.NullPointerException is logged on opening a smart rules table with a merged cell.
  • An incorrect text is highlighted in the error if the rule name starts with a number.
  • A non-informative error message is displayed if the OpenL Tablets keywords are used in the table incorrectly.
  • No error is displayed if the rule is called with the number of arguments exceeding the number of input arguments.
  • The rule table does not properly cast the SpreadsheetResult called by a full name from another module.
  • The java.lang.NullPointerException error is displayed for a constructor if the datatype contains an error.
  • The copy() operation does not copy transient object fields.


  • The Delete action button gets corrupted on project deletion.
  • The "compilation failed with circular reference issue" error is displayed for specific tables.
  • A session cookie does not contain the HttpOnly and Secure attributes.
  • The "Something went wrong" error is displayed on expanding a CustomSpreadsheetResult input item.
  • RepositoryTreeController is vulnerable to a JNDI injection.
  • “Something went wrong” error is displayed on executing the Run table.
  • A "Sorry! Something went wrong. " error is displayed on the rule table opening if the row under the table is merged.
  • The Open/Close action button is displayed for a local project after updating the repository local path.
  • A user record with special symbols in its name cannot be updated or removed.
  • The "Constructor not found" error is displayed in the dependent table if the main table is modified.
  • The "Manage Sources/Edit module" pop-up window cannot be closed if the "Back" browser button is clicked.
  • Search results include system virtual tables.
  • A user assigned a role of big length fails to log into OpenL Tablets WebStudio.
  • Editing any function via OpenL Tablets WebStudio breaks the Excel file.
  • The "Deployment1" name is automatically populated for the first added deployment repository.
  • The length of the "Default group for all users:" field is less than 65.
  • A user with the only Viewers role assigned cannot open a project via the "Open" button.
  • An error occurs on sending a request larger than 200KBytes.
  • The 'Deploy’ action button is displayed for a local project and users without the deploy permission.
  • OpenL Tablets WebStudio stops responding on opening a project if the method receives many parameters.
  • A circular dependency error is not displayed.
  • UI issues occur when the Design repository is not accessible.
  • A user cannot copy the closed project if the 'Do not link to origin project' option is selected.
  • The 'Group name' field is vulnerable to the XSS script attack.
  • The 'URL' field for the Git repository is populated with the default JDBC URL value if the first repository is a JDBC repository.
  • The incorrect module is displayed in the breadcrumbs if a user navigates to the table from the Table Dependency tab.
  • A link to a datatype table is displayed incorrectly.
  • No warning message is displayed to a user when opening a project with the same name as another opened project.
  • An error message is not displayed if incorrect workspace directory is specified.
  • The Delete action button gets corrupted on project deletion.


  • Warning messages are displayed for Tutorial 6 and Tutorial 8.
  • The "" error is displayed on when creating a project in Demo and OpenL Tablets Rule Services fails to start.
  • An AccessControlException error is displayed for concurrent execution when Java security policy is enabled.
  • Issues with DEMO application when it is run under a proxy with a prefixed location path.

DEMO, Docker:

  • Memory settings cannot be redefined via JAVA_OPTS.

Rule Services:

  • Memory leaks are detected in Tomcat logs on stopping.
  • If the 'message' attribute is null, it has a String type if a response type is 422.
  • A deadlock accidently occurs on deploying to a Deployment repository.
  • A server error 500 'java.lang.IllegalArgumentException' in OpenL Tablets Rule Services accidently occurs.


  • SAML attributes are not applied if SAMLResponse have not a defined attribute type like xsi:type="xs:string"


  • Docker images are not working with non-Latin symbols.

Updated Libraries

Vulnerabilities are fixed: CWE-611, CVE-2022-22978 ,CVE-2022-31159.

  • Spring Framework 5.3.22
  • Spring Security 5.7.2
  • Spring Boot 2.7.1
  • Kafka 3.2.0
  • CXF 3.5.3
  • Cassandra Java Driver 4.14.1
  • Log4j 2.18.0
  • Jetty 10.0.11
  • Hive JDBC 3.1.3
  • Apache Avro 1.11.0
  • ZooKeeper 3.7.1
  • Apache Thrift 0.16.0
  • Netty 4.1.79.Final
  • Kotlin Stdlib 1.7.10
  • Apache Groovy 3.0.11
  • Amazon S3 SDK 1.12.262
  • Azure BLOB Client 12.18.0
  • JGit
  • Mockito 4.6.1
  • Joda Time 2.10.14
  • Guava 31.1-jre
  • Apache XML Security 2.3.1
  • Swagger UI 4.11.1
  • Istack Common Utility Code Runtime 3.0.12
  • H2 DB 2.1.214
  • Hibernate ORM 5.6.10.Final
  • Hibernate Validator 6.2.3.Final
  • Reactor Netty 1.0.21
  • OkHttp 4.10.0
  • Reactive Streams 1.0.4
  • Datasource Proxy 1.8
  • Spring Security 5.7.1
    • Migration Notes


      Method add(T[] array, int index, T element) has been renamed to addElement(T[] array, int index, T... elements). Previously it worked unpredictably because of the same declaration was matched to the two different implementation. E.g. the following code: add(array, 1, 2) // [10, 20, 1, 2] or [10, 2, 20] ? where array = [10, 20] could be evaluated in not the same way as add(array, "1", "2") // exactly ["10", "20", "1", "2"], where array = ["10", "20"]

© Copyright OpenL Tablets, 2004-2024