May 28, 201015 yr 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.
May 28, 201015 yr 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>
October 9, 201015 yr Author merci pour ta réponse...finalement, j'ai fait autrement, suite à un changement de spec...mais bon
Archived
This topic is now archived and is closed to further replies.