Altova StyleVision 2024 Enterprise Edition

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 die JAVA_HOME-Umgebungsvariable ordnungsgemäß definiert ist und dass sich die Java Virtual Machine-Bibliothek (unter Windows die Datei jvm.dll) entweder im Verzeichnis \bin\server oder \bin\client befindet.

 

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.

 

Anmerkung:Wenn Sie einen Namespace zu einem XSLT-Stylesheet hinzufügen möchten, das anhand eines in SPS in StyleVision generiert wurde, muss der Namespace zum schema-Element der obersten Ebene des XML-Schemas, auf dem das SPS basiert, hinzugefügt werden. Beachten Sie, dass die folgende Namespace Deklaration xmlns:java="java" standardmäßig automatisch in jedem SPS erstellt wird, das in StyleVision entworfen wurde.

 

© 2017-2023 Altova GmbH