wso2 esb saxon ee配置

wso2 esb saxon ee配置,wso2,wso2esb,saxon,Wso2,Wso2esb,Saxon,我试图使用XSLT中介,但在获取值时,我希望对其应用自定义groovy函数。 例如: <script language="groovy"> def myfunction(value) { return "A B C"; } </script> <xsl:template match="/"> <urn:item> <urn:productName> <xsl:value-of

我试图使用XSLT中介,但在获取值时,我希望对其应用自定义groovy函数。 例如:

<script language="groovy">
  def myfunction(value) {
     return "A B C";
  }
</script>

<xsl:template match="/">
   <urn:item>
      <urn:productName>
         <xsl:value-of select="myfunction(PRODUCTNAME)"/>
      </urn:productName>
   </urn:item>
</xsl:template>

def myfunction(值){
返回“abc”;
}
我得到的错误是: net.sf.saxon.trans.XPathException:找不到名为myfunction()的匹配单参数函数

正如我所读到的,Saxon HE(wso2esb中的默认xslt处理器)不能调用扩展函数,但Saxon PE或EE可以

我遵循此处详述的步骤()但出现相同的错误

我的问题是: 有没有其他方法可以满足我的需要?我如何知道wso2 esb正在正确加载Saxon EE

非常感谢你的帮助

问候,, R

=====================================================

解决了

  • 按照@Carpentidge步骤在WSO2ESB中安装Saxon EE

  • 在@MichaelKay链接之后,我使用Java来做我需要的事情

首先,下载common-lang3.jar.zip并将.jar文件复制到repository/components/lib中。 然后,按如下方式修改xslt:

<xsl:template match="/">
   <xsl:variable name="pn" select="CSITPRODUCTNAME"/>
   <urn:item>
      <urn:productName>
         <xsl:value-of select="lang:unescapeHtml($pn)" xmlns:lang="java:org.apache.commons.lang.StringEscapeUtils"/>
      </urn:productName>
   </urn:item>
</xsl:template>


感谢您的帮助@Carpentidge和@MichaelKay

Saxon不支持用groovy编写的扩展函数,而且它不识别样式表文件中的
元素。Saxon定义扩展函数的机制如下所述:


Saxon不支持用groovy编写的扩展函数,并且它不能识别样式表文件中的
元素。Saxon定义扩展函数的机制如下所述:


您参考的用于重放saxon的手册不适用于ESB:)要替换用于ESB的saxon,请将
saxon9ee.jar
放在
ESB\u HOME\lib\approved
文件夹中,然后删除saxon\u HE文件。将许可证文件放在
ESB\u HOME
文件夹中(您可以从saxonica.com请求一个临时文件),然后重新启动ESB。 我在使用9.6.0时遇到一些困难,所以我建议使用9.5.1。

您参考的用于重放saxon的手册不适用于ESB:)要替换用于ESB的saxon,请将
saxon9ee.jar
放在
ESB\u HOME\lib\approved
文件夹中,然后删除saxon\u HE文件。将许可证文件放在
ESB\u HOME
文件夹中(您可以从saxonica.com请求一个临时文件),然后重新启动ESB。 我在使用9.6.0时遇到一些困难,所以我建议使用9.5.1。

谢谢你,迈克尔。我会看看那个链接。谢谢你,迈克尔。我会看看那个链接。谢谢!我将尝试您的方式,正如Michael所写,我认为我需要尝试使用Java或.Net脚本,而不是groovy。我真的不知道是否有可能做我想做的事情。我试过你的指示,但没有运气。我仍然有相同的错误:net.sf.saxon.trans.XPathException:找不到匹配的名为myfunction()的单参数函数另一个线索?如何检查Saxon EE是否已加载?多斯基帮不了我。。。谢谢。啊,但是现在你又回到了一个事实,撒克逊EE可能不支持你提到的功能,正如Micheal Kay在下面/上面解释的那样。我只是在回答你的问题“我如何检查saxon是否加载了”时发现你引用的手册不正确。没有任何东西直接表明它已加载,但我注意到它未加载时出现大量错误。因此,您可以删除.jar并查看在ESB启动期间是否注意到差异。(如果不是的话,你可能还有撒克逊人的档案……谢谢!我将尝试您的方式,正如Michael所写,我认为我需要尝试使用Java或.Net脚本,而不是groovy。我真的不知道是否有可能做我想做的事情。我试过你的指示,但没有运气。我仍然有相同的错误:net.sf.saxon.trans.XPathException:找不到匹配的名为myfunction()的单参数函数另一个线索?如何检查Saxon EE是否已加载?多斯基帮不了我。。。谢谢。啊,但是现在你又回到了一个事实,撒克逊EE可能不支持你提到的功能,正如Micheal Kay在下面/上面解释的那样。我只是在回答你的问题“我如何检查saxon是否加载了”时发现你引用的手册不正确。没有任何东西直接表明它已加载,但我注意到它未加载时出现大量错误。因此,您可以删除.jar并查看在ESB启动期间是否注意到差异。(如果不是的话,你可能还有撒克逊人,他在附近的某个地方归档了…)