jboss fuse xquery自定义功能

时间:2017-06-29 19:03:35

标签: apache-camel xquery jbossfuse

我们现有的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)

如果有人能回答我的问题,我真的很感激。

2 个答案:

答案 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

之前可以在Camel Route中设置标头的变量