Funciones de extensión Java
Se puede usar una función de extensión de Java dentro de una expresión XPath o XQuery para invocar un constructor Java o llamar a un método Java.
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.
Esta sección tiene varios apartados:
•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 lo siguiente
•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á ejecutando un producto servidor de Altova en un equipo Linux, asegúrese de que la variable de entorno JAVA_HOME esté configurada correctamente y de que la biblioteca Java Virtual Machines (en Windows, el archivo jvm.dll) se encuentre en el directorio \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. Para ello, asocia la función de extensión con una declaración de espacio de nombres dentro del ámbito, cuya URI debe comenzar 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 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() en el ejemplo anterior) debe coincidir con el nombre de un método estático público en la clase Java nombrada (java.lang.Math en el ejemplo anterior).
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.
Nota: Si desea añadir un espacio de nombres a una hoja de estilos generada desde un archivo SPS creado con StyleVision, el espacio de nombres se debe añadir al elemento de nivel superior schema del esquema XML en el que se basa el archivo SPS. Recuerde que la declaración de espacio de nombres xmlns:java="java" se crea automáticamente por defecto en todos los SPS creados con StyleVision.