2014-10-07 58 views
0

Can Saxon可以映射下面的扩展函数用下面的varargs调用java静态方法吗?Saxon 9是否支持扩展函数中的java可变参数?

XSLT:

<xsl:value-of select="mylib:fun('a', 'b', 'c')"/> 

的Java

public static String fun(String arg1, String... args) { ... } 

我预计撒克逊支持可变参数,但是,我得到

的命名空间URI和本地名称是公认,但参数的数量是错误的

我做错了什么?

它似乎能够识别序列()但我想实现一个函数,它具有零个或多个参数,如标准XPath函数库中的参数。

谢谢

+0

实际上,只有一个可变参数数量的功能在标准的XPath库中,concat(),这是一个异常。一般来说,XPath哲学是一个函数是通过它的名字和形式来标识的,而可变参数并不适合那种思维。 – 2014-10-08 08:46:26

回答

0

我想你已经回答了自己的问题:SAXON不支持它。

而且,它是有道理的 SAXON不支持它。 Java可变参数在编译器中实现;它们不在类文件或字节码中表示。所有SAXON看到的是接受两个参数(一个String和一个String[])并返回String的方法。

我不熟悉的SAXON的类型映射的所有细节,但也许你可以通过传递一个列表,第二个函数参数实现您的目标:

<xsl:value-of select="mylib:fun('a', ('b', 'c'))"/>