我们现有的xqueries要在新的JBoss熔丝集成应用中使用。作为其中的一部分,我试图使用JBoss Fuse 6.3的XQuery组件。我的问题是如何将参数传递给我的XQuery函数。这是我的骆驼语境
<camelContext id="dataConsumer-context" xmlns="http://camel.apache.org/schema/blueprint">
<propertyPlaceholder id="properties" location="classpath:sql.properties"/>
<route id="consumer-route">
<from id="_from1" uri="activemq:queue:house"/>
<log id="inputMessage" message="Got ${body}"/>
<to id="_to1" uri="xquery:myXquery.xquery"/>
<log id="transformedMessgae" message="Got ${body}"/>
<to id="_to2" uri="sql:{{sql.insertIntoMessage}}"/>
<log id="_log2" message="Message is inserted into DB"/>
</route>
</camelContext>
在myXquery.xquery中,这是我的函数
declare function xf:myPayments($pmtAddInp1 as element(ns0:PmtAddInp),
$header as element(*), $PaymentConstants as element(*)) as element() { }
declare variable $pmtAddInp1 as element(ns0:PmtAddInp) external;
declare variable $header as element(*) external;
declare variable $PaymentConstants as element(*) external;
xf:myPayments($pmtAddInp1,$header,$PaymentConstants)
如果有人能回答我的问题,我真的很感激。
答案 0 :(得分:0)
Camel Exchange中的所有内容都对您的XQuery可见。例如,您可以将所需的参数作为标题放在Camel Route中,然后在XQuery中将它们定义为declare variable $in.headers.myArgumentKey as xs:string external;
,它们可供您的函数直接用作名为$in.headers.myArgumentKey
的变量< / p>
答案 1 :(得分:0)
除了格里的回答:
body作为根元素传递给XQuery组件。 假设我有入境机构
<Auth>
<userName>JohnDoe</userName>
<userPassword>abcd1234</userPassword>
</Auth>
然后我可以让XQuery对其进行转换,它可能看起来像:
declare variable $in.headers.referenceId as xs:string external;
declare function transformRequest($requestBody as element()) as element() {
<newRequest>
<RqUID>{$in.headers.referenceId}</ser:RqUID>
<UserPrincipal>{$requestBody/userName/text()}</UserPrincipal>
<UserCredentials>{$requestBody/userPassword/text()}</UserCredentials>
</newRequest>
};
let $request := /*[1]
return buildNewRequest($request)
如您所见let $request := /*[1]
将内部变量$request
设置为邮件正文的根元素。
PS。 $in.headers.referenceId
是我在调用我的XQuery