Aufbau einer Properties-Datei
Was sind Properties?
Properties sind Mengen von Name-Wert-Paaren, die häufig zur Konfiguration von Programmen oder Programmteilen verwendet werden. Sowohl Namen (Keys) als auch Werte sind Texte (Typ String). Aus der Sicht des Programmierers handelt es sich um ein Objekt vom Typ java.util.Properties, aber aus der Sicht des Anwenders ist es eine Textdatei, die unter dem Abschnitt Darstellung der Properties in einer Datei beschrieben wird. Für die Konfiguration von Klassen, wie z. B. Zeitgesteuerte eigene Klassen, Preparser, Funktionen, Integration Units, Postexecution, Eigene Klassen Phase 6 werden oft Properties-Dateien verwendet.
Für die Mehrzahl aller Fälle reicht es aus, wenn man in einer Properties-Datei jedes Name-Wert-Paar in eine eigene Zeile setzt. Der Name steht dabei am Zeilenanfang und ein = (Gleichheitszeichen, 3DHex) trennt den Namen vom Wert. Dahinter, bis zum Zeilenende, steht der Wert. Wenn keine "verbotenen Zeichen" vorkommen, ist diese Regel ausreichend. In speziellen Fällen ist es aber nötig, die Regeln genau zu kennen, z. B. wenn man Leerzeichen oder Doppelpunkt in einem Namen oder Wert nicht vermeiden kann. Da die "offizielle" Beschreibung der Java-Properties-Dateien http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load(java.io.Reader) leider nicht leicht verständlich ist, versuchen wir hier eine zusätzliche Erläuterung.
Ein Properties-Objekt entspricht dem Mengentyp Map (Zuordnung) aus der Mengenlehre. Die Menge aller Namen bildet ein Set, in dem ein Name nicht mehrmals vorkommen kann. Die Namen sind also eindeutig (unique). Die Werte-Menge ist nicht unique, d. h. zu verschiedenen Namen kann derselbe Wert zugeordnet werden. Die leere Menge oder eine Menge mit nur einem Eintrag ist erlaubt, aber ein leerer Name (kein Zeichen) ist nicht zulässig. Der Zugriff auf einen Wert erfolgt, indem man einen gültigen Namen angibt. Man erhält dann den Wert, der diesem Namen zugeordnet ist. Das ist etwa vergleichbar mit den Systemvariablen eines Betriebssystems.
Darstellung der Properties in einer Datei
Properties-Objekte können aus einer Datei geladen, bzw. in eine Datei geschrieben werden. Eine solche Datei ist immer eine Textdatei, in der jede Zeile einem Name-Wert-Paar entspricht. Obwohl es üblich ist, die Dateiendung .properties zu verwenden, ist das nicht wichtig. Als Zeichen-Encoding der Datei ist ISO 8859-1 vorgeschrieben. Siehe: http://www.open-std.org/JTC1/SC2/WG3/docs/n411.pdf. Folgende Regeln gelten.
Jede Zeile (es kann mehrere geben), die nicht Leerzeile oder Kommentarzeile ist, enthält üblicherweise ein Name-Wert-Paar.
Eine Kommentarzeile beginnt mit einem # (23Hex) und wird beim Lesen der Properties ignoriert. Hier kann ein Kommentar stehen.
Eine Leerzeile ist jede Zeile, die höchstens SP (Leerzeichen, 20Hex), oder HT (Tabulator, 09Hex) enthält.
Ein Property, also ein Name-Wert-Paar, wird durch eine Zeile folgender Form dargestellt (Der Trenner = ist üblich, aber nicht das einzige erlaubte Trennzeichen): <Name>=<Wert>
Erlaubte Trenner zwischen Name und Wert sind nach ISO 8859-1 folgende Zeichen: = (Gleichheitszeichen, 3DHex), SP (Space, 20Hex), HT (Tabulator, 09Hex), oder : (Doppelpunkt, 3AHex). Diese Trennzeichen sind innerhalb des Namens nicht zulässig. Um die Wirkung als Trenner abzuschalten, kann man sie mit einem direkt davor stehenden \ (Backslash, 5CHex) "entwerten".
Der Backslash ist deshalb selbst auch ein Sonderzeichen. Wenn er "literal" gemeint wird, muss man ihn durch einen Backslash entwerten, d. h. ein Backslash in einem Namen, oder Wert muss doppelt geschrieben werden.
Am Zeilenanfang vor dem Namen stehende Leerzeichen oder Tabs werden ignoriert.
Jede Kombination von Trennzeichen zwischen Name und Wert wird wie ein einziges Trennzeichen behandelt. Vor dem Wert stehende Leerzeichen oder Tabs werden deshalb auch ignoriert, falls sie nicht entwertet sind.
Da nur das Encoding ISO 8859-1 für die Properties-Datei erlaubt ist, müssen Zeichen, die in diesem Encoding nicht existieren, "umschrieben" werden. Das geschieht durch \u vor dem 2-Byte-Unicode. Das Umschreiben erlaubter Zeichen ist zulässig. Beispiel: A und \u0041 sind gleichwertig.
Reguläre Ausdrücke in einer Properties-Datei
Wenn in einer Properties-Datei reguläre Ausdrücke (Regex) stehen müssen, ist das eine besondere Herausforderung, speziell innerhalb der Namen der Properties. Falls der reguläre Ausdruck SP (Space, 20Hex), = (Ist Gleich, 3DHex), : (Doppel Punkt, 3AHex), oder \ (Backslash, 5CHex) enthält, müssen diese Zeichen durch einen Backslash entwertet werden. Wenn diese Regel beachtet wird, bleibt es übersichtlich.
Folgend die normale Schreibweise eines beispielhaften Regex.
^\s*[A-Z\-]+: \d{1,9} .* |
Und hier die Schreibweise in einer Properties-Datei.
^\\s*[A-Z\\-]+\:\ \\d{1,9}\ .* |
Beispiel
Als Beispiel hier eine einfache Properties-Datei für den Preparser EdifactSegmentSplitter mit 2 Property-Zeilen.
# properties for: com.ebd.hub.datawizard.parser.EdifactSegmentSplitter
# define the segment to split with
segment=LIN
#
# define the max. package size - e.g. put 5.000 LIN segments into one message
package=5000
Property Editor
Der Property Editor ermöglicht die einfache Bearbeitung einer Properties-Datei. Momentan ist dieser Editor für Eigene Klassen in der Phase 6 verfügbar. Es werden automatisch alle Properties angezeigt, die für die jeweilige Klasse vorhanden sind.