【发布时间】: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