Archivos de clases definidos por el usuario

www.altova.com Imprimir este apartado Página anterior Subir un nivel Página siguiente

Inicio >  Anexos > Información sobre motores > Funciones XSTL y XPath/XQuery > Funciones de extensión varias > Funciones de extensión Java >

Archivos de clases definidos por el usuario

Si se accede a las clases por medio de un archivo de clases, entonces hay cuatro posibilidades:

 

El archivo de clases está en un paquete. El archivo XSLT/XQuery está en la misma carpeta que el paquete Java. (ver ejemplo.)
El archivo de clases no está en un paquete. El archivo XSLT/XQuery está en la misma carpeta que el archivo de clases. (ver ejemplo.)
El archivo de clases está en un paquete. El archivo XSLT/XQuery está en una carpeta cualquiera. (ver ejemplo.)
El archivo de clases no está en un paquete. El archivo XSLT/XQuery está una carpeta cualquiera. (ver ejemplo.)

 

Imaginemos que tenemos un archivo de clases que no está en un paquete y que está en la misma carpeta que el documento XSLT/XQuery. En este caso, puesto que en la carpeta se encuentran todas las clases, no es necesario especificar la ubicación del archivo. La sintaxis que se utiliza para identificar una clase es esta:

 

         java:nombreClase

 

 donde

 

java: indica que se está llamando a una función definida por el usuario (por defecto se cargan las clases Java del directorio actual)

         nombreClase es el nombre de la clase del método elegido

 

 La clase se identifica en un URI de espacio de nombres y el espacio de nombres se usa como prefijo para la llamada al método.

 

 

El archivo de clases está en un paquete. El archivo XSLT/XQuery está en la misma carpeta que el paquete Java

El código que aparece a continuación llama al método getVehicleType() de la clase Car del paquete com.altova.extfunc. El paquete com.altova.extfunc está en la carpeta JavaProject. El archivo XSLT también está en la carpeta JavaProject.

 

 <xsl:stylesheet version="2.0" 

         xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 

         xmlns:xs="http://www.w3.org/2001/XMLSchema" 

         xmlns:fn="http://www.w3.org/2005/xpath-functions"

         xmlns:car="java:com.altova.extfunc.Car" >

 <xsl:output exclude-result-prefixes="fn car xsl fo xs"/>

 

 <xsl:template match="/">

            <a>

    <xsl:value-of select="car:getVehicleType()"/>

    </a>

 </xsl:template>

 

 </xsl:stylesheet>

 

 

El archivo de clases está referenciado. El archivo XSLT/XQuery está en la misma carpeta que el archivo de clases

El código que aparece a continuación llama al método getVehicleType() de la clase Car. Digamos que: (i) el archivo de clases Car está en esta carpeta: JavaProject/com/altova/extfunc y que (ii) esa carpeta es la del ejemplo siguiente. El archivo XSLT también está en la carpeta JavaProject/com/altova/extfunc.

 

 <xsl:stylesheet version="2.0" 

         xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 

         xmlns:xs="http://www.w3.org/2001/XMLSchema" 

         xmlns:fn="http://www.w3.org/2005/xpath-functions"

         xmlns:car="java:Car" >

 <xsl:output exclude-result-prefixes="fn car xsl fo xs"/>

 

 <xsl:template match="/">

            <a>

    <xsl:value-of select="car:getVehicleType()"/>

    </a>

 </xsl:template>

 

 </xsl:stylesheet>

 

 

El archivo de clases está en un paquete. El archivo XSLT/XQuery está en una carpeta cualquiera

El código que aparece a continuación llama al método getCarColor() de la clase Car del paquete com.altova.extfunc. El paquete com.altova.extfunc está en la carpeta JavaProject. El archivo XSLT está en otra carpeta cualquiera. En este caso debe especificarse la ubicación del paquete dentro del URI como una cadena de consulta. La sintaxis es esta:

 

         java:nombreClase[?ruta=uri-del-paquete]

 

 donde

 

java: indica que se está llamando a una función Java definida por el usuario

uri-del-paquete es el URI del paquete Java

nombreClase es el nombre de la clase del método elegido

 

La clase se identifica en un URI de espacio de nombres y el espacio de nombres se usa como prefijo para la llamada al método. El ejemplo de código que aparece a continuación explica cómo se accede a un archivo de clases que está ubicado en un directorio que no es el directorio actual.

 

 <xsl:stylesheet version="2.0" 

         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

         xmlns:xs="http://www.w3.org/2001/XMLSchema" 

         xmlns:fn="http://www.w3.org/2005/xpath-functions"

         xmlns:car="java:com.altova.extfunc.Car?path=file:///C:/JavaProject/" >

 

 <xsl:output exclude-result-prefixes="fn car xsl xs"/>

 

 <xsl:template match="/">

            <xsl:variable name="myCar" select="car:new('red')" /> 

    <a><xsl:value-of select="car:getCarColor($myCar)"/></a>

 </xsl:template>

 

 </xsl:stylesheet>

 

 

El archivo de clases no está en un paquete. El archivo XSLT/XQuery está una carpeta cualquiera

El código que aparece a continuación llama al método getCarColor()de la clase Car. Digamos que el archivo de clases Car está en la carpeta C:/JavaProject/com/altova/extfunc y que el archivo XSLT está en otra carpeta cualquiera. En este caso debe especificarse la ubicación del paquete dentro del URI como una cadena de consulta. La sintaxis es esta:

 

         java:nombreClase[?ruta=<uri-del-archivoClases>]

 

 donde

 

java: indica que se está llamando a una función Java definida por el usuario

uri-del-archivoClases es el URI de la carpeta donde se ubica el archivo de clases

nombreClase es el nombre de la clase del método elegido

 

La clase se identifica en un URI de espacio de nombres y el espacio de nombres se usa como prefijo para la llamada al método. El ejemplo de código que aparece a continuación explica cómo se accede a un archivo de clases que está ubicado en un directorio que no es el directorio actual.

 

 <xsl:stylesheet version="2.0" 

         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

         xmlns:xs="http://www.w3.org/2001/XMLSchema" 

         xmlns:fn="http://www.w3.org/2005/xpath-functions"

         xmlns:car="java:Car?path=file:///C:/JavaProject/com/altova/extfunc/" >

 

 <xsl:output exclude-result-prefixes="fn car xsl xs"/>

 

 <xsl:template match="/">

            <xsl:variable name="myCar" select="car:new('red')" /> 

    <a><xsl:value-of select="car:getCarColor($myCar)"/></a>

 </xsl:template>

 

 </xsl:stylesheet>

 

Nota:cuando se presenta una ruta de acceso por medio de una función de extensión, la ruta de acceso se añade al ClassLoader.

 


© 2019 Altova GmbH