Open FreshMarker File for other file systems

Sometimes an extension starts with a question that sounds unremarkable at first: Can I use the files from an OCI-based file system in a FreshMarker template? FreshMarker File already supports java.nio.file.Path. An OCI file system like Oras Filesystem also returns Path objects. So, in theory, the integration should work. However, during practical testing, I discovered an assumption in my code that works for local paths but not for other file systems: I had converted a Path back to a java.io.File in several places. This investigation led to a general extension of FreshMarker File. The existing Path operations now use Java NIO, and templates can additionally list directories and examine symbolic links.

Bank Account Validator 0.9.0 Released

The new version of Bank Account Validator updates the bank data for Germany, Austria, and Switzerland. CSV processing for Austria has been revised; for Switzerland, the library now uses the current CSV V3 format from SIX and accounts for successor institutions. Corrections to character encoding also ensure that bank names containing umlauts are imported correctly.

OCI Artifacts as Files: A Look Behind the ORAS File System

An application wants to read a file. However, the file is not located on a hard drive but exists as an artifact in an OCI registry. Does the application therefore need to know how to resolve manifests, query tags, and download blobs?

This is exactly where the ORAS filesystem comes in: It translates the world of OCI artifacts into the familiar interfaces of Java NIO. From a developer’s perspective, the boundary between these two worlds is particularly interesting. A path can be constructed relatively easily. Mapping a remote, content-addressed artifact in such a way that file access remains meaningful requires significantly more decision-making.

Leitweg-ID Revisited: Less Calculation, Faster Verification

In my 2021 post titled „Leitweg ID – Ihre Nummer für die Behörde“, I presented a Java implementation for an identifier that is rarely discussed outside the context of electronic invoicing. The task was straightforward: recognize a Leitweg-ID, extract its components, verify the checksum, and generate a correct text representation.

FreshMarker Spring Boot Starter

FreshMarker is a modern Java template engine that offers a clear, type-safe API and a lightweight runtime environment for server-side HTML rendering. This article provides an overview of the FreshMarker Spring Boot Starter. An integration without boilerplate code that integrates FreshMarker into Spring Boot 4 MVC applications, offering automatic configuration, localization-aware template resolution, transparent caching, and a set of clearly defined extension points.

REST endpoints with filters

This article is a slightly updated English version of the article “REST Endpunkte mit Filtern”.

In addition to sorting and pagination, filtering is a fairly common action on REST endpoints. In contrast to the first two, however, there is no adequate solution for filtering in the Spring Boot framework. With little effort, however, this can be elegantly implemented with the Spring Boot tools.

More Than Just Container Images: OCI Registries as Artifact Repositories with ORAS Java

Almost every team today runs a container registry: Artifactory, AWS, Azure, GitHub, GitLab, Harbor, or a self-hosted one. However, many use them only for Docker images. An OCI registry, however, can do more. It stores any type of file, versions them using tags, makes them immutable via digests, and handles authentication and permissions. When I was once again faced with the question of where to store my artifacts and how to distribute them, the usual options came to mind. In the end, I didn’t go with any of them. I used the existing registry and ORAS Java.

Custom Spring Boot Scheduler

With the @Schedule annotation, you can very quickly set up recurring tasks in your Spring Boot application. It’s a bit frustrating, though, that you can only choose between two very limited configuration options. Isn’t there more to Spring Boot than that?