【问题标题】:How to frame XML String Request in WSO2 esb如何在 WSO2 esb 中构建 XML 字符串请求
【发布时间】:2014-11-14 11:15:34
【问题描述】:

我正在使用 wso2esb-4.8.1, 我希望在 wso2esb 中构建字符串请求,因为我正在使用 Xquery。 我在 xquery 中尝试过使用字符串函数,但出现错误 我的xquery是这样的

<x xmlns="http://ws.apache.org/ns/synapse">
  declare namespace xs = "http://www.w3.org/2001/XMLSchema";
  declare namespace env="http://eai.googl.afr/Envelope";
  declare namespace kls="http://eai.klsdop.inso/klsservice";
  declare variable $Id as xs:string+ external;
  declare variable $Name as xs:string+ external;
  declare variable $Message as xs:string+ external;
  declare variable $PHNO as xs:string+ external;

  element{'kls:XInput'}{
  element{'kls:XData'}{string(
  <DATA>      
    <REQUEST ID_VALUE="{$Id}" NAME_VALUE="{$Name}" MESSAGE_VALUE="{$Message}" USER_TYPE="Daimond" PHNO_VALUE="{$PHNO}" ></REQUEST>
</DATA>)
  }
  }

所以上面的 xquery 我用来构建下面的 STRING 请求

    <kls:XInput>
    <kls:XData>
         <DATA>
 <REQUEST ID_VALUE="5" NAME_VALUE="Faisal" MESSAGE_VALUE="Who" USER_TYPE="Daimond" PHNO_VALUE="65879541212" ></REQUEST>
</DATA>
 </kls:XInput>
  </kls:XData>

但是我在 wso2esb 中遇到这样的错误。因为每次值都会改变。

[2014-11-14 16:23:44,375] ERROR - XQueryMediator Error during the querying No ex
ternal variable named **Id** exists in the query
javax.xml.xquery.XQException: No external variable named **Id** exists in the qu
ery
        at net.sf.saxon.xqj.SaxonXQDynamicContext.bindExternalVariable(SaxonXQDy
namicContext.java:225)
        at net.sf.saxon.xqj.SaxonXQDynamicContext.bindObject(SaxonXQDynamicConte
xt.java:154)
        at org.apache.synapse.mediators.xquery.XQueryMediator.bindVariable(XQuer
yMediator.java:594)
        at org.apache.synapse.mediators.xquery.XQueryMediator.performQuery(XQuer
yMediator.java:311)
        at org.apache.synapse.mediators.xquery.XQueryMediator.mediate(XQueryMedi
ator.java:123)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractLis
tMediator.java:77)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractLis
tMediator.java:47)
        at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMe
diator.java:131)
        at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(Pro
xyServiceMessageReceiver.java:166)

为什么它会给出错误,我通过 Xquery 中介从我的代理服务传递值。 我的代理是这样的

<?xml version="1.0" encoding="UTF-8"?><proxy xmlns="http://ws.apache.org/ns/synapse" name="Example" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
    <target>
        <inSequence>
            <property name="a" value="values" scope="default" type="STRING"/>
            <xquery key="AddStringExample">
                <variable name="Id" value="25" type="STRING"/>
                <variable name="Name" value="fisudal" type="STRING"/>
                <variable name="Message" value="Who r u" type="STRING"/>
                <variable name="PHNO" value="123456" type="STRING"/>
                 </xquery>
            <log level="full"/>
        </inSequence>
        <outSequence/>
    </target>
    <description/>
</proxy>

有谁知道如何解决这个问题。在 XSLT 中是否有任何解决方案可以做到这一点
提前致谢。

【问题讨论】:

  • 在 Orcle Osb 中,我们可以使用 fn-bea:serialize() 函数来实现这一点,但如何在 wso2esb 中实现
  • 如果我在 wso2 esb 中使用相同的函数,它会给出这样的错误 [2014-11-17 12:18:54,027] 错误 - 查询期间的 XQueryMediator 错误找不到匹配的 0 参数函数命名为 {bea.com/xquery/xquery-fu nctions}serialize() javax.xml.xquery.XQException:在 net.sf.saxon.xqj.SaxonXQConnection.newXQException(SaxonXQConnection. java:195)

标签: xslt xpath wso2 xquery wso2esb


【解决方案1】:

它应该适合你。

    <x xmlns="http://ws.apache.org/ns/synapse">
  declare namespace xs = "http://www.w3.org/2001/XMLSchema";
  declare namespace env="http://eai.googl.afr/Envelope";
  declare namespace kls="http://eai.klsdop.inso/klsservice";
  declare variable $Id as xs:string+ external;
  declare variable $Name as xs:string+ external;
  declare variable $Message as xs:string+ external;
  declare variable $PHNO as xs:string+ external;

  element{'kls:XInput'}{
  element{'kls:XData'}{
  element{'kls:DATA'}{
  element{'REQUEST'}{concat('REQUEST ID_VALUE=','"',$Id,'" ','NAME_VALUE=','"',$Name,'" ','MESSAGE_VALUE=','"',$Message,'" ','USER_TYPE=','"','Daimond','" ','PHNO_VALUE=','"',$PHNO,'"')}
  }
  }
  }
  </x>                            

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多