Java-Erweiterungsfunktionen

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Anhänge > XSLT- und XPath/XQuery-Funktionen > Diverse Erweiterungsfunktionen >

Java-Erweiterungsfunktionen

Eine Java-Erweiterungsfunktion kann in einem XPath- oder XQuery-Ausdruck verwendet werden, um einen Java-Konstruktor oder eine Java-Methode (statisch oder Instanz) aufzurufen.

 

Ein Feld in einer Java-Klasse wird als Methode ohne Argument betrachtet. Bei einem Feld kann es sich um ein statisches Feld oder eine Instanz handeln. Wie man Felder aufruft, wird in den entsprechenden Unterabschnitten zu statischen Feldern und Instanzen beschrieben.

 

Dieser Abschnitt enthält die folgenden Unterabschnitte:

 

Java: Konstruktoren
Java: Statische Methoden und statische Felder
Java: Instanzmethoden und Instanzfelder
Datentypen: XPath/XQuery in Java
Datentypen: Java in XPath/XQuery

 

Beachten Sie die folgenden Punkte

Wenn Sie ein Altova Desktop-Produkt verwenden, versucht die Altova-Applikation, den Pfad zur Java Virtual Machine automatisch zu ermitteln. Dazu wird zuerst (i) die Windows Registry und dann (ii) die JAVA_HOME-Umgebungsvariable gelesen. Sie können im Dialogfeld "Optionen" der Applikation auch einen benutzerdefinierten Pfad hinzufügen. Dieser Eintrag hat Vorrang vor allen anderen automatisch ermittelten Java VM-Pfaden.
Wenn Sie ein Altova Server-Produkt auf einem Windows-Rechner ausführen, wird der Pfad zur Java Virtual Machine zuerst aus der Windows Registry ausgelesen. Falls dies nicht gelingt, wird die JAVA_HOME-Umgebungsvariable verwendet.
Wenn Sie ein Altova Server-Produkt auf einem Linux- oder macOS-Rechner ausführen, sollten Sie sicherstellen, dass der Pfad zur Java Virtual Machine in der JAVA_HOME-Umgebungsvariablen gespeichert ist. Der Pfad muss auf die Datei jvm.dll im Verzeichnis \bin\server oder \bin\client verweisen.

 

Form der Erweiterungsfunktion

Die Erweiterungsfunktion im XPath/XQuery-Ausdruck muss die folgenden Form haben präfix:fname().

 

Der Teil präfix: kennzeichnet die Erweiterungsfunktion als Java-Funktion, indem er die Erweiterungsfunktion mit einer in-scope Namespace-Deklaration verknüpft, deren URI mit java: beginnen muss (Beispiele siehe unten). Die Namespace-Deklaration sollte eine Java-Klasse bezeichnen, z.B:
xmlns:myns="java:java.lang.Math". Sie könnte aber auch einfach lauten: xmlns:myns="java" (ohne Doppelpunkt), wobei die Identifizierung der Java-Klasse dem fname() Teil der Erweiterungsfunktion überlassen bleibt.
Der Teil fname() identifiziert die aufgerufene Java-Methode und liefert die Argumente für die Methode (Beispiele siehe unten). Wenn die durch das prefix: Teil identifizierte Namespace URI jedoch keine Java-Klasse bezeichnet (siehe vorheriger Punkt), dann sollte die Java-Klasse im fname() Teil vor der Klasse identifiziert werden und von der Klasse durch einen Punkt getrennt sein (siehe zweites XSLT-Beispiel unten).

 

Anmerkung:Die aufgerufene Klasse muss sich unter dem Klassenpfad des Rechners befinden.

 

 

XSLT-Beispiel

Hier sehen Sie zwei Beispiele dafür, wie eine statische Methode aufgerufen werden kann. Im ersten Beispiel ist der Klassenname (java.lang.Math) in der Namespace URI enthalten und darf daher nicht im fname() Teil enthalten sein. Im zweiten Beispiel liefert der prefix: Teil das Präfix java:, während der fname() Teil die Klasse sowie die Methode identifiziert.

 

 <xsl:value-of xmlns:jMath="java:java.lang.Math
                 select="jMath:cos(3.14)" />

 

 <xsl:value-of xmlns:jmath="java
                 select="jmath:java.lang.Math.cos(3.14)" />

 

Die in der Erweiterungsfunktion (im Beispiel oben cos()) angegebene Methode muss mit dem Namen einer öffentlichen statischen Methode in der angegebenen Java-Klasse (im Beispiel oben java.lang.Math) übereinstimmen.

 

 

XQuery-Beispiel

Hier sehen Sie ein XQuery-Beispiel, das dem XSLT-Beispiel oben ähnlich ist:

 

 <cosine xmlns:jMath="java:java.lang.Math">

    {jMath:cos(3.14)}

 </cosine>

 

 

Benutzerdefinierte Java-Klassen

Wenn Sie Ihre eigenen Java-Klassen erstellt haben, werden die Methoden in diesen Klassen unterschiedlich aufgerufen, je nachdem: (i) ob die Klassen über eine JAR-Datei oder eine Klassendatei aufgerufen werden, und (ii) ob sich diese Dateien (JAR oder Klasse) im aktuellen Verzeichnis befinden (im selben Verzeichnis wie das XSLT- oder XQuery-Dokument) oder nicht. Wie Sie diese Dateien finden, wird in den Abschnitten Benutzerdefinierte Klassendateien und Benutzerdefinierte Jar-Dateien beschrieben. Pfade zu Klassendateien, die sich nicht im aktuellen Verzeichnis befinden, und Pfade zu allen JAR-Dateien müssen jedoch angegeben werden.

 


© 2019 Altova GmbH