Posté(e) le 28 mai 201015 a Je dois effectuer une transformation XSL qui fait appel à une classe Java. La méthode Java que j'appelle est la suivante : public class SimpleTransco { void transcode(String transcoId, String value) { ... } } public class ComplexTransco { void transcode(String transcoId, String value, String partenanireSrc, String partenaireDst) { ... } } Je voudrais factoriser un peu mon code, et avoir un truc du genre public abstract class Transco { void transcode(List<String> args) { doTranscode(List<String> args); } abstract void doTranscode(List<String> args); } public class SimpleTransco extends Transco { void doTranscode(List<String> args) { ... } } public class ComplexTransco extends Transco { void doTranscode(List<String> args) { ... } } Actuellement, j'appelle mes fonctions avec un truc du genre ; ... <xsl:template match="/" xmlns:customfunctions="xalan://monpackage.SimpleTransco"> <xsl:variable name="valeur" select="//valeur" /> <pays> <xsl:value-of select="customfunctions:transcodification('TRANSCO_1', $valeur')" /> </pays> </xsl:template> ... ... <xsl:template match="/" xmlns:customfunctions="xalan://monpackage.ComplexTransco"> <xsl:variable name="valeur" select="//valeur" /> <pays> <xsl:value-of select="customfunctions:transcodification('TRANSCO_1', $valeur, 'PARTICIPANT_A', 'PARTICIPANT_B')" /> </pays> </xsl:template> ... Le problème, c'est que je ne sait pas comment passer une liste d'arguments à une fonction XSL.
Posté(e) le 28 mai 201015 a Je ne pense pas qu'il soit possible de récupérer directement une liste de string. Les types (non scalaires) supportés par Xalan sont org.w3c.dom.traversal.NodeIterator ou org.w3c.dom.NodeList. Donc tu dois pouvoir faire un truc du genre : public abstract class Transco { void transcodeFromXml(NodeIterator args) { List<String> values = new List<String>; for(Node n: args) { if(n.getNodeType() == Node.TEXT_NODE) values.add(n.getNodeValue()); } doTranscode(values); } void transcode(List<String> args) { doTranscode(List<String> args); } abstract void doTranscode(List<String> args); } Et du coup dans le XSL : <xsl:template match="/" xmlns:customfunctions="xalan://monpackage.SimpleTransco"> <xsl:variable name="valeur" select="//valeur" /> <pays> <xsl:value-of select="customfunctions:transcodeFromXml($valeur)" /> </pays> </xsl:template>
Posté(e) le 9 octobre 201014 a Auteur merci pour ta réponse...finalement, j'ai fait autrement, suite à un changement de spec...mais bon
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.