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

So günstig & effizient war Content Produktion noch nie: Neues Content System erobert deutschen Markt

Kontinuierliche Content Produktion und Markenaufbau sind essentieller Pfeiler von langfristigen Unternehmenserfolg. Das ist mittlerweile auch…

4 Tagen ago

Lenovo übertrifft die Erwartungen und hebt Prognose an

KI-Funktionen beschleunigen die Erholung des PC-Markts. Der Nettogewinn legt um 44 Prozent zu, der Umsatz…

5 Tagen ago

Bedrohungsakteure betten Malware in macOS-Flutter-Anwendungen ein

Googles App-Entwickler-Kit dient der Tarnung des schädlichen Codes. Der Sicherheitsanbieter Jamf hält die Schadsoftware für…

5 Tagen ago

CopyRhadamantys greift weltweit Unternehmen an

Ausgeklügelte Phishing-Kampagne verwendet eine weiterentwickelte Version der Rhadamanthys-Stealer-Malware.

1 Woche ago

Facebook Marketplace: EU verhängt Geldbuße von fast 800 Millionen Euro gegen Meta

Die EU-Kommission kritisiert die Verknüpfung von Facebook und dem hauseigenen Online-Kleinanzeigendienst. Sie sieht darin einen…

1 Woche ago

Umfrage: Angestellte in Deutschland unterschätzen NIS-2-Richtlinie

Fast zwei Drittel halten jedoch eine Umsetzung aller Vorgaben von NIS 2 bis Jahresende für…

1 Woche ago