2017-06-29 116 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