XML-Scripting mit E4X

Normalerweise hätte man hierfür das Bean Scripting Framework (BSF) verwendet, aber die Entwicklung von BSF und Rhino verläuft nicht mehr ganz synchron: Das BSF-Projekt hat zwar im CVS Änderungen vorgenommen, aber noch kein offizielles Release herausgebracht, welches diese Änderungen enthält. Ältere Versionen von Rhino funktionieren damit zwar, nicht aber die E4X-fähigen, daher wird hier zum Aufrufen der Rhino Javascript-Engine auf Rhinos eigene Embedding-Funktionen zurückgegriffen.

DigTVs Konstrukter lädt die Scriptdatei und wertet sie aus. Dann sucht er die im Script definierten Funktionen.

Ein Context enthält die Thread-spezifischen Informationen für Rhino. Über die Funktion enter wird der aktuelle Thread mit einem Kontext verknüpft. Der Geltungsbereich (scope) ist ein scriptfähiges Objekt, welches alle Javascript-Funktionen und -Variablen enthält. Ein solcher Geltungsbereich ist unabhängig vom Kontext, der ihn erstellt hat. initStandardObjects liefert einen Geltungsbereich, indem die Standard-Javascript-Objekte definiert sind. Nun kann man ein Script auswerten.

Damit wird das Script gelesen. Man erinnere sich: Das Script besteht vor allem aus Funktionsdefinitionen, auf die man wie folgt zugreifen kann:

Die Methode getFunction ruft die get-Methode von scope auf, was die Abfrage von jedem benannten Objekt im ausgewerteten Javascript ermöglicht, und überprüft, ob auch ein Function-Objekt zurückgegeben wird und nicht zum Beispiel eine Variable. Sobald dies alles erledigt ist, muss man den erstellten Kontext wieder verlassen, um die Verknüpfung mit dem Thread zu lösen.

In der GetTV-Klasse wird ein Timer verwendet um den Code aufzurufen, so dass eine XML-Datei von einer erzeugten URL abgerufen und geparst wird, was ein XMLBeans-XMLObject liefert. Dann wird die process-Methode von DigTV aufgerufen:

Der Kontext wird betreten und die call-Methode der Javascript-Funktion aufgerufen, wobei das XMLObject als Parameter übergeben wird. Wie man sich erinnert, wird das XMLObject in der Datei digscript.js verpackt und verarbeitet. Sobald dies erledigt ist, wird der Kontext wieder verlassen. So einfach ist das, es gilt jedoch ein paar Fallstricke zu beachten. Derzeit ist es noch schwierig, die zugrunde liegenden XMLObjects aus E4X-XML-Objekten zu extrahieren, daher sollte man derzeit die Schnittstelle für XMLObjects noch als Einbahnstraße von Java zu Javascript betrachten.

Sobald der GetTV-Timer seine Aufgabe erledigt hat, ruft er die Funktion reportNow auf, um anzuzeigen, dass er fertig ist, und macht dann für 24 Stunden Pause.

Wenn man den Wert von finaldoc ausgibt, erhält man Folgendes:

Page: 1 2 3 4 5

ZDNet.de Redaktion

Recent Posts

EU-Datenschützer kritisieren Facebooks „Zustimmung oder Bezahlung“-Modell

Ohne eine kostenlose Alternative, die ohne Zustimmung zur Verarbeitung personenbezogener Daten zu Werbezwecken auskommt, ist…

1 Woche ago

Europol meldet Zerschlagung der Phishing-as-a-Service-Plattform LabHost

LabHost gilt als einer der größten Phishing-Dienstleister weltweit. Die Ermittler verhaften 37 Verdächtige, darunter der…

1 Woche ago

DE-CIX Frankfurt bricht Schallmauer von 17 Terabit Datendurchsatz pro Sekunde

Neuer Datendurchsatz-Rekord an Europas größtem Internetknoten parallel zum Champions-League-Viertelfinale.

1 Woche ago

Samsungs neuer LPDDR5X-DRAM erreicht 10,7 Gbit/s

Die neuen Chips bieten bis zu 25 Prozent mehr Leistung. Samsung steigert auch die Energieeffizienz…

1 Woche ago

Cisco warnt vor massenhaften Brute-Force-Angriffen auf VPNs

Betroffen sind Lösungen von Cisco, Fortinet, SonicWall und anderen Anbietern. Die Hacker nehmen Konten mit…

1 Woche ago

Cybersicherheit in KMUs: Es herrscht oft Aufholbedarf

Immer häufiger müssen sich Betriebe gegen Online-Gefahren wehren. Vor allem in KMUs werden oft noch…

2 Wochen ago