Funciones de extensión Java
Puede usar una función de extensión Java dentro de una expresión XPath o XQuery para invocar un constructor Java o llamar a un método Java (estático o de instancia).
Un campo de una clase Java se trata como un método sin argumentos. Un campo puede ser estático o de instancia. Más adelante describimos cómo se accede a los campos estáticos y de instancia.
Este apartado tiene varias partes:
•Archivos de clases definidos por el usuario
•Archivos JAR definidos por el usuario
•Java: Métodos estáticos y campos estáticos
•Java: Métodos de instancia y campos de instancia
•Tipos de datos: Conversión de XPath/XQuery en Java
•Tipos de datos: Conversión de Java en XPath/XQuery
Tenga en cuenta que:
•Si está usando un producto de escritorio de Altova, la aplicación intentará detectar automáticamente la ruta de acceso al equipo virtual Java; para ello leerá (en este orden): (i) el registro de Windows y (ii) la variable de entorno JAVA_HOME. También puede añadir una ruta personal en el cuadro de diálogo "Opciones" de la aplicación; esta ruta tendrá prioridad frente a cualquier otra ruta de acceso a un equipo virtual Java que se detecte automáticamente.
•Si está usando un producto servidor de Altova en un equipo Windows, la ruta de acceso al equipo virtual Java se leerá primero desde el registro de Windows; si esto no ocurre se usa la variable de entorno JAVA_HOME.
•Si está usando un producto servidor de Altova en un equipo Linux o macOS, entonces asegúrese de que la variable de entorno JAVA_HOME está definida correctamente y la biblioteca Java de equipos virtuales (en Windows, el archivo jvm.dll) se encuentra en uno de estos directorios: \bin\server o \bin\client.
Formato de la función de extensión
La función de extensión de la expresión XPath/XQuery debe tener este formato prefijo:nombreFunción().
•La parte prefijo: identifica la función de extensión como función Java. Lo hace asociando la función de extensión con una declaración de espacio de nombres del ámbito, cuyo URI debe empezar por java: (ver ejemplos más abajo). La declaración de espacio de nombres debe identificar una clase Java, por ejemplo: xmlns:myns="java:java.lang.Math". Sin embargo, también puede ser simplemente: xmlns:myns="java" (sin los dos puntos), dejando la identificación de la clase Java a la parte nombreFunción() de la función de extensión.
•La parte nombreFunción()identifica el método Java al que se llama y presenta los argumentos para el método (ver ejemplos más abajo). Sin embargo, si el URI de espacio de nombres identificado por la parte prefijo: no identifica una clase Java (ver punto anterior), entonces la clase Java debe identificarse en la parte nombreFunción(), antes de la clase y separada de la clase por un punto (ver el segundo ejemplo XSLT que aparece más abajo).
Nota: | La clase a la que se llama debe estar en la ruta de acceso de clase del equipo. |
Ejemplo de código XSLT
Aquí ofrecemos dos ejemplos de cómo se puede llamar a un método estático. En el primer ejemplo, el nombre de la clase (java.lang.Math) se incluye en el URI de espacio de nombres y, por tanto, no puede estar en la parte nombreFunción(). En el segundo ejemplo, la parte prefijo: presenta el prefijo java: mientras que la parte nombreFunción() identifica la clase y el método.
<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)" />
El método nombrado en la función de extensión (cos()) debe coincidir con el nombre de un método estático público de la clase Java nombrada (java.lang.Math).
Ejemplo de código XQuery
Aquí puede ver un ejemplo de código XQuery similar al código XSLT anterior:
<cosine xmlns:jMath="java:java.lang.Math">
{jMath:cos(3.14)}
</cosine>
Clases Java definidas por el usuario
Si creó sus propias clases Java, a los métodos de estas clases se les llama de otra manera, dependiendo de: (i) si a las clases se accede por medio de un archivo JAR o de un archivo de clases y (ii) si estos archivos están en el directorio actual (el directorio del documento XSLT o XQuery). Para más información consulte los apartados Archivos de clases definidos por el usuario y Archivos Jar definidos por el usuario. Recuerde que debe especificar las rutas de acceso de los archivos de clases que no están en el directorio actual y de todos los archivos JAR.