Objekt aus Client XML erzeugen
Wertauflöser - Kurzfassung
Zweck: Versucht eine als Eingabewert übergebene Zeichenfolge als XML zu parsen, um ein Objekt zurückzugeben.
Siehe auch: Client XML aus Objekt erzeugen
Der Client XML aus Objekt erzeugen-Wertauflöser versucht eine als Eingabewert übergebene Zeichenfolge als XML zu parsen (s. XML Datenencoder), um ein Objekt zurückzugeben.
Der Parameter Klassen Feldname definiert den Namen des XML-Attributs, das die "Klasse" von Elementen im Client-XML angibt. Elemente, die über dieses XML-Attribut verfügen, sollen in den betreffenden Datentyp bzw. die Klasse umgewandelt werden.
Dabei sind folgende Fälle zu unterscheiden:
Eingabewert (abstrakt) |
Eingabewert (konkrete Beispiele) |
Rückgabewert (mit "Klassen Feldname" passend: class) |
... mit "Klassen Feldname" unpassend (hier: nicht class) |
Fehler |
kein Wert ($null) |
kein Wert ($null) |
kein Wert ($null) |
n/a |
|
Eine Zeichenfolge, die kein wohlgeformtes XML definiert |
leere Zeichenfolge ("") abcXYZ <missingSlashInClosingTag>XYZ<missingSlashInClosingTag> |
n/a |
ProcessException:Failed to parse |
|
Ein wohlgeformtes XML, das in einem beliebig benannten root -Element als Inhalt nur Text enthält. |
<obj>123E4</obj> |
123E4(Zeichenfolge) |
n/a |
|
Ein wohlgeformtes XML mit einem root-Element, dessen (simpler) Inhalt in die im anwendbaren Klassenfeld (hier: class) spezifizierte Klasse umgewandelt werden kann. |
<obj class="java.lang.Double">123E4</obj> |
1230000.0 ►HINWEIS◄ Die originale Zeichenfolge 123E4 wird unter Berücksichtigung der Regeln für die Java-Klasse Double interpretiert und ergibt als Exponentialzahl den Zahlenwert 123 x 10^4 (1230000.0). |
(Client-Objekt in JSON-Notation) ►HINWEIS◄ Wenn der Eingabewert 123E4 ohne Berücksichtigung der Klasse Double/Long interpretiert wird, besteht über das automatisch erzeugte Feld textContent Zugriff auf die originale Zeichenfolge und über das Feld class auf den Namen der "eigentlichen" Klasse. |
n/a |
Ein wohlgeformtes XML mit einem root-Element, dessen (simpler) Inhalt nicht in die im anwendbaren Klassenfeld (hier: class) spezifizierte Klasse umgewandelt werden kann. |
<obj class="java.lang.Long">123E4</obj> |
kein Wert ($null) ►HINWEIS◄ Die originale Zeichenfolge 123E4 wird unter Berücksichtigung der Regeln für die Java-Klasse Long interpretiert. Die Interpretation der Exponentialschreibweise (123 x 10^4) wird für Long im Unterscheid zu Double nicht unterstützt. |
n/a |
|
Ein wohlgeformtes XML mit einem root-Element für das im anwendbaren Klassenfeld (hier: class) eine im Kontext unbekannte Klasse angegeben ist. |
<obj class="fancy.Number">123E4</obj> |
{"textContent": "123E4", (Client-Objekt in JSON-Notation) |
n/a |
|
Ein wohlgeformtes XML, dessen root-Element sich auf einen für den Server definierten root-Element-Typ (hier: "Ereignis") bezieht und erfolgreich gegen dessen Schema validiert werden kann. |
<alert class="de.lobster.scm.scem.incident:Incident"> ►WICHTIG◄ Die Felder incidentState, incidentSource und { incidentSeverity beziehen ihre Werte aus Dynamische Aufzählungen. Die im Beispiel zugeordneten Zeichenfolgen verwenden die internen Namen der entsprechenden Werte. Damit die automatische Umwandlung vom String zum Dynamischen Aufzählungswert funktioniert, muss dem betreffenden Element explizit die Klasse string (bzw. java.lang.String) im class-Attribut zugewiesen sein. |
{ (Neue Incident-Entität - s. Klasse SCEM Ereignisse - ►HINWEIS◄ Inhalte, die im Datenmodell der Klasse nicht vorgesehen sind (im Beispiel: additionalInformation) "fehlen" in der erzeugten Entität. Dafür erscheinen hier Standardfelder mit Standardwerten für deren Datenmodell (z. B: id=0). |
{ (Client-Objekt in JSON-Notation) ►HINWEIS◄ Das Client-Objekt gibt alle Informationen aus dem XML wieder, bildet diese aber ohne jegliche Berücksichtigung in unterschiedlichen Ebenen referenzierten Klassen ab. |
n/a |
Konfiguration
Als Eingabewert wird eine Zeichenfolge für ein wohlgeformtes XML-Dokument erwartet.
Der Parameter Klassen Feldname definiert einen Feldnamen, der innerhalb des XML-Strings als Attribut verwendet werden kann, um die Klasse eines Objekts zu identifizieren.
Per Standard wird das Feld class verwendet.
Passt der in der Konfiguration angegebene Klassen Feldname nicht zum Inhalt des als Eingabewert vorliegenden XMLs, weil diese für Verweise auf Klassen von Objekten einen anderen Namen verwendet, dann werden die entsprechenden Inhalte nicht gegen das Objektmodell der angegebenen Klasse geparst. Stattdessen wird ein "Client-Objekt" erzeugt, in dem dann der ggf. vorhandene Verweis auf die nicht berücksichtigte Klasse unter dem unpassenden Namen als Feldwert nachlesbar ist. Für die relevanten Beispiele zeigt die Tabelle oben mit gelber Schattierung in Spalte 4 (anhand der JSON-Notation), wie solche Client-Objekte aussehen können.
►ANMERKUNG◄ Das "Ignorieren" bestehender Klassen-Referenzen ist typischer Weise nicht erwünscht, wenn der Client XML aus Objekt erzeugen-Wertauflöser zum Einsatz kommt, zumal es pauschal alle ggf. "klassifizierten" Inhalte betrifft.
Beispiel
Über eine Ereignisbehandlung soll auf ausgewählte Inhalte einer Datei mit Wetterdaten zugegriffen werden, die periodisch in das Dateisystem des Lobster_pro-Servers geschrieben wird.
Die Datei stellt im XML-Format eine Liste von Flugwetterberichten in Textform mit der folgenden Struktur bereit:
<
avmet
>
<
metar
>
<
icaoAdId
>EDMO</
icaoAdId
>
<
metarType
>COR</
metarType
>
<
metarText
>
EDMO 201320Z 27013G23KT 250V310 CAVOK 29/14 Q1013=
</
metarText
>
</
metar
>
<
metar
>
<
icaoAdId
>EDMA</
icaoAdId
>
<
metarType
/>
<
metarText
>
EDMA 201350Z 26013KT 230V290 CAVOK 29/14 Q1012=
</
metarText
>
</
metar
>
...
</
avmet
>
Im Kontext einer Ereignisbehandlung sollen ein Objekt erzeugt werden, das die in der Datei enthaltenen Wetterberichte metar-Elemente als Liste von Client-Objekten wiedergibt. Aus dem Dateiinhalt soll dazu insgesamt in ein "Listenobjekt" erzeugt werden, das im Kontext der Ereignisbehandlung mit Wertauflösern (Regel-Listen Resolver, Listenwert, usw.) genauer "untersucht" bzw. ausgewertet werden kann.
Konfiguration:
Innerhalb einer Ausführen mit-Ereignisaktion soll die Liste aller Wetterberichte ( metar-Elemente im XML) aus der Datei als abweichendes Bezugsobjekt gelten. Die folgende Verkettung von Wertauflösern ermöglicht die Umwandlung der XML-Datei in ein "Listenobjekt":
►ANMERKUNG◄ Im Aktionsblock der Ausführen mit-Ereignisaktion könnte diese Liste z. B. per Regel-Listen Resolver nach einem Wetterbericht für einen bestimmten Flughafen durchsucht werden, der durch eine Objekt-Feld-Regel für das Feld icaoAdId identifiziert wird. |
|