0

我希望使用 xpath 我的输入来打破 wso2esb 中的字符串,如下所示

<property name="Message" value="assetname:ups,assetcode:452chi,assetid:548935,assetvalue:215" scope="default"/>

我需要使用 xpath 打破相同的属性我需要这样

assetname:ups
assetcode=452chi
assetid=54895
assetvalue=215

为此,我尝试使用标记化功能,但 wso2esb 显示错误我的配置文件

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Xpathcheck" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <property name="max" value="1" scope="default" type="STRING"/>
         <property name="min" value="1" scope="default" type="STRING"/>
         <property name="MessageText" expression="fn:concat('Assetid:',get-property('min'),',','Assetname:',get-property('max'))" scope="default" type="STRING"/>
         <property name="Tokenize" expression="fn:tokenize(get-property('Messagetext'),',')" scope="default" type="STRING"/>
         <log>
            <property name="MessageText" expression="get-property('MessageText')"/>
            <property name="Tokenize" expression="get-property('Tokenize')"/>
         </log>
               </inSequence>
      <outSequence/>
   </target>
   <description></description>
</proxy>

但是像这样的抛出错误你对此有任何想法我需要将它存储在 Db 表中作为一个字段,看起来像单独的行错误是

ERROR - SynapseXPath Evaluation of the XPath expression fn:tokenize(get-property('Messagetext'),',') resulted in an error
org.jaxen.UnresolvableException: No Such Function tokenize
4

2 回答 2

4

tokenize 是 XPath 2.0 附带的一个函数。要启用 XPath 2.0 功能,请取消注释位于 $ESB_HOME/repository/conf 目录的 synapse.properties 文件中的以下条目

synapse.xpath.dom.failover.enabled=true

那么您必须按如下方式指定中介,

<property name="Message" value="a,b,c,d,e" scope="default"/>
         <property xmlns:fn="http://www.w3.org/2005/xpath-functions" name="Tokenize" expression="fn:tokenize(syn:get-property('Message'),',')" scope="default" type="STRING"/>
于 2013-07-15T07:22:39.003 回答
1

我不认为这可以通过 XPath 来完成,XPath 是在 XML 中导航元素。您可以通过使用脚本中介并编写 JS 来破坏属性值来做到这一点。使用以下内容从脚本中介访问 ESB 参数

<script language="js"> var test_param = mc.getProperty('Message')

使用以下内容将脚本中介中的参数检索回 ESB

mc.setProperty("param1",var1)
mc.setProperty("param2",var2)

使用 javascript 执行所需的字符串操作

于 2013-07-11T08:07:46.980 回答