2017-06-29 54 views
0

我們有現有的xqueries,我們希望在我們新的JBoss保險絲集成應用程序中使用它。作爲我嘗試使用JBoss Fuse 6.3的XQuery組件的一部分。我的問題是如何將參數傳遞給我的XQuery函數。這是我的駱駝背景jboss保險絲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

駱駝交易所中的所有內容對您的XQuery都是可見的。例如,你可以把所需的參數爲您的駱駝路線中的報頭,那麼你的XQuery內你將它們定義爲declare variable $in.headers.myArgumentKey as xs:string external;,他們將可以爲您的功能,直接使用一個名爲$in.headers.myArgumentKey

+0

感謝Gerry的迴應。讓我試試看 – Praveen

+0

它工作。謝謝格里 – Praveen

+0

如果你想把xml放入消息頭,它取決於xml的來源。如果在使用Camel從文件,數據庫,隊列或其他端點中讀取xml後,xml在交換中,那麼您可以直接使用setHeader(「parmName」,simple(「$ {body}」))你的駱駝路線。或者你可以使用一個常數,即使是這樣:'setHeader(「parmName」,常量(「 Hello world」))。 –

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中設置爲標題

+0

有關聯,謝謝Vadim的迴應。對此,我真的非常感激。 – Praveen

+0

它的工作就像一個魅力,感謝Vadim – Praveen

+0

簡單的恆定值的工作。我想在我的XQuery中使用xml作爲參數,任何想法如何在頭文件中設置xml? – Praveen