Format von XML-Konfigurationsdateien

Alle hier beschriebenen Services lassen sich über XML-Dateien konfigurieren, die einem bestimmten Format folgen. Dieses soll im Folgenden näher beschrieben werden.

Grundlage der XML-Dateien ist die Datei configure_1_3.dtd, die sich im Verzeichnis ./etc/dtd des Integration Servers befindet. Die Besonderheit dieser Art XML ist, dass die XML-Einträge zur Laufzeit in Methodenaufrufe der entsprechenden Klasse umgewandelt werden.

Der Befehlsumfang der XML-Konfiguration ist relativ klein und sieht folgendermaßen aus.


Befehl

Bedeutung

Set

Ruft eine Set-Methode der derzeit aktuellen Instanz auf.

Put

Schreibt ein Mapping in die aktuelle Map.

Call

Ruft eine Methode der derzeit aktuellen Instanz auf.

New

Erzeugt eine neue Instanz einer Klasse.

Get

Ruft eine Get-Methode der derzeit aktuellen Instanz auf.

XML-Dateirumpf


<!DOCTYPE Configure PUBLIC
"-//EBD Integration//DTD Configure 1.0//EN"
"http://www.lobster.de/dtd/configure_1_1.dtd">
<Configure class="[Name der zu konfigurierenden Klasse]">
[Befehle fuer die Konfiguration]
</Configure>


Beim Klassennamen handelt es sich um den voll qualifizierten Klassennamen, also inklusive des Packages, in dem sich die Klasse befindet.

Set


Mittels des Befehls Set wird eine einzelne Set-Methode der aktuellen Instanz aufgerufen. Als Argument wird der Wert angegeben, der gesetzt werden soll. Da Set-Methoden laut Definition nur ein Argument besitzen dürfen, wird hier auf das Arg-Tag verzichtet. Der zu setzende Wert wird als Value des XML-Tags übergeben.

Hat eine Klasse beispielsweise die Methode


public void setName(String val);


definiert, sähe der XML-Aufruf folgendermaßen aus.


<Set name="name">Wert</Set>


Wie man sieht, ist als Wert für das Attribut name, der Methodenname ohne das vorangehende set zu verwenden, wobei der erste Buchstabe nach dem set im Methodenname immer klein zu
schreiben ist.

Existieren mehrere Set-Methoden mit gleichem Namen und verschiedenem Typ oder ist der Typ der Set-Methode anders als String, sollte immer der Typ des übergebenen Wertes explizit angegeben werden.

Dies erfolgt über das Attribut type und kann folgende Werte annehmen.


int

Bezeichnet einen Wert vom primitiven Typ int.

boolean

Bezeichnet einen Wert vom primitiven Typ boolean.

long

Bezeichnet einen Wert vom primitiven Typ long.

float

Bezeichnet einen Wert vom primitiven Typ float.

double

Bezeichnet einen Wert vom primitiven Typ double.

short

Bezeichnet einen Wert vom primitiven Typ short.


Hat eine Klasse beispielsweise die Methode


public void setPort(int val);


definiert, sähe der XML-Aufruf folgendermaßen aus.


<Set name="port" type="int">25</Set>

Put


Die Methode Put erwartet, dass die aktuelle Instanz eine Methode


public void put(Object key, Object val);


besitzt. Der Key wird bei diesem Aufruf über das Attribut name und der zu setzende Wert als Value des XML-Tags gesetzt. Der XML-Aufruf sähe bei der oben gezeigten Methode daher folgendermaßen aus.


<Put name="key">Value</Set>


Da die Methode selbst nur Instanzen von Objekten und keine Primitivtypen akzeptiert, ist eine Angabe des Attributs type in diesem Zusammenhang nicht möglich.

Call


Über den Befehl Call können beliebige Methoden mit einer beliebigen Anzahl von Parametern aufgerufen werden. Beispielsweise würde der Methodenaufruf


public void put(Object key, Object value);


innerhalb der XML-Konfigurationsdatei folgendermaßen aussehen.


<Call name="put">
<Arg>key</Arg>
<Arg>value</Arg>
</Call>


Haben einzelne Parameter einen primitiven Typen, ist, wie für Set beschrieben, dieser über das Attribut type bei dem jeweiligen Argument entsprechend festzulegen.

New


Über den Befehl New kann eine neue Instanz der angegebenen Klasse erzeugt werden. Soll ein anderer Konstruktor als der Standardkonstruktor verwendet werden, sind die entsprechenden Parameter als Arg-Elemente zu übergeben. Anhand der Reihenfolge und der Typen der Argumente wird automatisch der dazu passende Konstruktor für die Initialisierung herangezogen.

Werden weitere Befehle innerhalb des New-Bereichs eingefügt, beziehen diese sich auf die neu erzeugte Instanz.

Soll beispielsweise eine ArrayList mit einer Initialgröße von 10 Elementen erzeugt und dieser zwei Texte hinzugefügt werden, würde dies mit folgendem XML-Fragment passieren.


<New class="java.util.ArrayList">
<Arg type="int">10</Arg>
<Call name="add">
<Arg>Text1</Arg>
</Call>
<Call name="add">
<Arg>Text2</Arg>
</Call>
</New>


Dieses XML-Fragment würde üblicherweise seinen Platz innerhalb eines Arguments für einen Set-Befehl finden, der eine Methode aufruft, die wiederum als Parameter eine Liste erwartet.

Get


Der Befehl Get ruft eine Get-Methode der aktuellen Instanz auf. Werden weitere Befehle innerhalb des Get-Befehls hinzugefügt, beziehen sich diese auf das zurückgegebene Objekt. Der Name der Methode wird im XML äquivalent zum Set-Befehl gebildet, d. h. das get wird weggelassen und der erste Buchstabe des Rests zu einem Kleinbuchstaben umgewandelt.

Hat man beispielsweise innerhalb einer verlinkten Liste Elemente, die ebenfalls Listen darstellen, würde das Holen des ersten Elements und das Hinzufügen eines Textes zu diesem Element über folgendes XML-Fragment erfolgen.


<Get name="first">
<Call name="add">
<Arg>Neuer Text</Arg>
</Call>
</Get>

Weitere Befehle


Neben den bereits erwähnten Befehlen sind weitere Tags möglich, die hier kurz erwähnt werden sollen und vor allem innerhalb der Angabe von Argumenten Verwendung finden.

Array

Wird verwendet, um ein Array vom angegebenen Typ zu übergeben. Die einzelnen Elemente werden dabei über das Tag Item übergeben. Der Typ des Arrays wird über das Attribut type gesetzt, wobei hier bei Arrays von Objekten der voll qualifizierte Klassenname angegeben werden muss.

SystemProperty

Ruft die Methode System.getProperty auf. Das zu lesende Property wird über das Attribut name gesetzt, ein eventuell zu verwendender Defaultwert über das Attribut default.