Charles.w Posté(e) le 28 mai 2010 Partager Posté(e) le 28 mai 2010 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 28 mai 2010 Partager Posté(e) le 28 mai 2010 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> Lien vers le commentaire Partager sur d’autres sites More sharing options...
Charles.w Posté(e) le 9 octobre 2010 Auteur Partager Posté(e) le 9 octobre 2010 merci pour ta réponse...finalement, j'ai fait autrement, suite à un changement de spec...mais bon Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.