Metodi Java richiamati da un XSL

Vi è mai capitato di aver bisogno di richiamare un metodo di una classe Java in un XSL? E’ possibile ed ora vedremo come


Per farlo occorre usare il tag introdotto con la versione 1.1 degli XSL. Questo tag è un valido meccanismo di estensione delle funzionalità dell’XSL in un determinato namespace. Tramite la specifica dell’attributo language è possibile definire anche di che tipo di funzione si tratta, per cui si possono definire funzioni Java, Javascript ecc…

Esempio, dato un xml del tipo:

<?xml version="1.0" encoding="ISO-8859-1"?>
<example>
	<name>arcover80<name>
</example>

si compone l’XSL:

<xsl:stylesheet
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:Hello="example.Hello"	version="1.1">
	<xsl:script implements-prefix="Hello" 
		xmlns:Hello="example.Hello" language="java"
		src="/example.Hello" />
		<xsl:template match="/">
		   <output method="text" />
		   <xsl:apply-templates />
		</xsl:template>
		<xsl:template match="name">
		   <xsl:value-of select="Hello:hello('arcover80')" />
		</xsl:template>
</xsl:stylesheet>

e la classe…

package example;
public class Hello{
		public static String hello(String name){
			return "Hello "+name;
		}
}

Nell’XSL si deve dichiarare il namespace che permetterà di utilizzare il comando, poichè corrispondente alla classe qualificata con il package di appartenneza, e poi il tag che specifica il linguaggio in cui è scritta la funzione esterna attraverso l’attributo language. L’attributo src indica l’implementazione della funzione richiesta. implements-prefix specifica il prefisso di namespace che a runtime verrà estesa con l’URI contenuta nel namespace dichiarato nel tag xsl:script stesso. Chiaramente il risultato della trasformazione sarà:

Hello arcover80

Sicuramente utile in tutte quelle situazioni in cui si voglia utilizzare gli XSL non solo per pura presentazione, ma anche per tutte le trasformazioni che richiedono operazioni custom di cui l’XSL non può disporre.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.