【问题标题】:How We Can Break a String in Wso2esb using Xpath我们如何使用 Xpath 在 Wso2esb 中破坏字符串
【发布时间】:2013-07-15 15:22:39
【问题描述】:

我希望使用 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

为此,我尝试使用 tokenize 函数,但 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

【问题讨论】:

    标签: xpath wso2 wso2esb wso2dss


    【解决方案1】:

    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"/>
    

    【讨论】:

    • 感谢您的精彩回答。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 感谢快速重播。我们可以像数组一样将值附加到一个属性中吗?我们可以在 wso2esb 中创建数组吗
    • 您可以通过脚本中介创建这样一个数组,然后 ESB 可以访问该数组。
    • 再次感谢..k 我会尝试基本上我来自 oracle soa 所以我对 javascript 了解不多
    • 如果您遇到任何错误,请将问题发布为社区中的某个人可以帮助您。
    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2017-12-11
    相关资源
    最近更新 更多