3 votes

Comment appeler une fonction Java externe dans un fichier XSLT ?

J'ai ce fichier xslt que j'ai besoin d'appeler une fonction java placée ailleurs dans la même application. Dans le fichier xslt j'ai

    Summary: 

mais lorsque j'essaie d'exécuter ce fichier xlst, j'obtiens l'erreur suivante

Erreur signalée par la transformation XSL:
Erreur de syntaxe XPath au caractère 21 à la ligne -1 dans {test_my:parse2($text)}:
Impossible de trouver une fonction correspondante à un argument nommé {vobs.plugins.WikiParser.WikiParser}parse2()

Il semble qu'il ne puisse pas trouver la classe java, donc quelle est la bonne façon de faire cela ? Un exemple de code serait encore mieux. Merci d'avance !

3voto

neilgmacy Points 509

J'ai exactement eu le même problème et cela l'a résolu pour moi où urn:java: et java: ont tous deux échoué.

En supposant que vous utilisez Xalan pour effectuer la transformation, vous devriez changer xmlns:test_my="vobs.plugins.WikiParser.WikiParser" en xmlns:test_my="xalan://vobs.plugins.WikiParser.WikiParser".

3voto

shivamvds Points 41

Cela dépend du processeur de transformation XSLT que vous utilisez. Saxon utilise urn:java:; Xalan utilise xalan://.

2voto

Itay Maman Points 15470

Vous devez modifier la déclaration de l'espace de noms (à l'élément xsl:stylesheet) de xmlns:test_my="vobs.plugins.WikiParser.WikiParser" à xmlns:test_my="urn:java:vobs.plugins.WikiParser.WikiParser"

La justification est la suivante : Pour utiliser une classe C du package a.b, vous devez définir un préfixe d'espace de noms et l'associer à urn:java:a.b.C.

Si je comprends correctement XSL, le préfixe urn: est nécessaire pour importer du code Java qui ne fait pas partie de la bibliothèque standard (comme dans votre cas). Si vous avez seulement besoin d'importer des classes de la bibliothèque standard, alors "java:" fera l'affaire.

(Plus de détails : http://cafeconleche.org/books/xmljava/chapters/ch17s03.html)

[MODIFICATION : changer "java:" -> "urn:java:"]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X