Archivos JAR definidos por el usuario
Si se accede a las clases por medio de un archivo JAR, entonces se debe especificar el URI del archivo JAR usando esta sintaxis:
xmlns:claseEspacioNombres="java:nombreClase?ruta=jar:uri-del-archivoJar!/"
Para la llamada al método se usa el prefijo del URI de espacio de nombres que identifica la clase: claseEspacioNombres:método()
En la sintaxis anterior:
java: indica que se está llamando a una función de Java
nombreClase es el nombre de la clase definida por el usuario
? es el separador entre el nombre de la clase y la ruta de acceso
ruta=jar: indica que se ofrece una ruta de acceso a un archivo JAR
uri-del-archivoJar es el URI del archivo JAR
!/ es el delimitador final de la ruta de acceso
claseEspacioNombres:método() es la llamada al método
Otra opción es dar el nombre de la clase con la llamada al método. Por ejemplo:
xmlns:ns1="java:docx.layout.pages?path=jar:file:///c:/projects/docs/docx.jar!/"
ns1:main()
xmlns:ns2="java?path=jar:file:///c:/projects/docs/docx.jar!/"
ns2:docx.layout.pages.main()
Y aquí puede ver un ejemplo de XSLT que usa un archivo JAR para llamar a una función de extensión Java:
<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?path=jar:file:///C:/test/Car1.jar!/" >
<xsl:output exclude-result-prefixes="fn car xsl xs"/>
<xsl:template match="/">
<xsl:variable name="myCar" select="car:Car1.new('red')" />
<a><xsl:value-of select="car:Car1.getCarColor(\$myCar)"/></a>
</xsl:template>
<xsl:template match="car"/>
</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.