首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Mule从数据库检索值

无法使用Mule从数据库检索值
EN

Stack Overflow用户
提问于 2016-03-30 07:59:13
回答 2查看 769关注 0票数 0

我试图通过浏览器传递多个查询参数

http://localhost:8081/test?SourceQueue=mqinput&PayloadMsgId=11004a90Test0001-3

我的流程如下所示,我使用set有效负载转换器将查询参数设置为有效负载,然后将这些值传递给存储过程。但我无法从数据库中检索值。在数据库连接器之后,有效负载为空。

流的配置xml如下所示:

代码语言:javascript
复制
    <set-payload value="SourceQueue=#[message.inboundProperties.'http.query.params'.SourceQueue],PayloadMsgId=#[message.inboundProperties.'http.query.params'.PayloadMsgId]" doc:name="Set Payload"/>
    <logger message="#[payload]----------------before db" level="INFO" doc:name="Logger"/>
   <db:stored-procedure config-ref="Generic_Database_Configuration" doc:name="Database">
        <db:parameterized-query><![CDATA[{CALL E_Enquiry(:SourceQueue1,:PayloadMsgId1)}]]></db:parameterized-query>
        <db:in-param name="PayloadMsgId1" type="VARCHAR" value="#[payload.SourceQueue]"/>
        <db:in-param name="SourceQueue1" type="VARCHAR" value="#[payload.PayloadMsgId]"/>

    </db:stored-procedure>
    <logger message="#[payload]----output" level="INFO" doc:name="Logger"/>

我的存储过程如下:

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE E_Enquiry 
    (IN SourceQueue1 VARCHAR(30) DEFAULT NULL,
     IN PayloadMsgId1 VARCHAR(100) DEFAULT NULL) 
LANGUAGE SQL
DYNAMIC RESULT SETS 1
BEGIN 
    DECLARE C1 CURSOR WITH RETURN TO CLIENT FOR 
        select PayloadMsgId,ExceptionId,EventSource,E_Message.InterfaceId,
            CreationTime,SourceProtocol,ErrorMessage,Severity,InterfaceName 
        from E_Message,E_Config
        where (SourceQueue=SourceQueue1 and PayloadMsgId=PayloadMsgId1); 
    open c1; 
END;

请帮忙解决这个问题。

EN

回答 2

Stack Overflow用户

发布于 2016-03-30 14:38:29

你的表情:-

代码语言:javascript
复制
<set-payload value="SourceQueue=#[message.inboundProperties.'http.query.params'.SourceQueue],PayloadMsgId=#[message.inboundProperties.'http.query.params'.PayloadMsgId]" doc:name="Set Payload"/>

是不正确的,您不能通过将其设置为有效负载来实现这一点,因为当前有效负载是字符串格式,而不是对象。

理想的解决方案是使用变量,如下所示:

代码语言:javascript
复制
<set-variable variableName="SourceQueuevar" value="#[message.inboundProperties.'http.query.params'.SourceQueue]" doc:name="Set SourceQueuevar"/>

 <set-variable variableName="PayloadMsgIdvar" value="#[message.inboundProperties.'http.query.params'.PayloadMsgId]" doc:name="Set PayloadMsgIdvar"/>

设置好之后,您可以在SQL记录器中的以下表达式中轻松地使用它:- #[flowVars.SourceQueuevar] #[flowVars.PayloadMsgIdvar]

票数 0
EN

Stack Overflow用户

发布于 2016-03-31 21:47:56

FlowVars是一种功能,但是您也可以使用以下符号轻松地创建一个映射:

代码语言:javascript
复制
<set-payload value="#[['SourceQueue':message.inboundProperties.'http.query.params'.SourceQueue,'PayloadMsgId':message.inboundProperties.'http.query.params'.PayloadMsgId]]" doc:name="Set Payload"/>

通过这种方式,您可以作为对象访问有效负载(因为它是一个映射)。您可以使用如下表达式访问有效负载值:

代码语言:javascript
复制
#[payload.SourceQueue] 

代码语言:javascript
复制
#[payload.PayloadMsgId]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36302901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档