【问题标题】:Unable to retrieve the values from the database using Mule无法使用 Mule 从数据库中检索值
【发布时间】:2016-04-01 16:23:40
【问题描述】:

我正在尝试通过浏览器传递多个查询参数

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

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

我的config xml流程如下:

    <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"/>

我的存储过程如下:

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;

请帮助解决这个问题。

【问题讨论】:

    标签: database stored-procedures mule query-parameters


    【解决方案1】:

    你的表情:-

    <set-payload value="SourceQueue=#[message.inboundProperties.'http.query.params'.SourceQueue],PayloadMsgId=#[message.inboundProperties.'http.query.params'.PayloadMsgId]" doc:name="Set Payload"/>
    

    不正确,您无法通过将其设置为有效负载来实现此目的,因为有效负载现在是字符串格式而不是对象。

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

    <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"/>
    

    一旦设置好,您就可以在任何地方轻松使用它,在您的 SQLlogger 中,如下表达式:- #[flowVars.SourceQueuevar] #[flowVars.PayloadMsgIdvar]

    【讨论】:

      【解决方案2】:

      FlowVars 是一个选项,但您也可以使用以下符号轻松创建地图:

      <set-payload value="#[['SourceQueue':message.inboundProperties.'http.query.params'.SourceQueue,'PayloadMsgId':message.inboundProperties.'http.query.params'.PayloadMsgId]]" doc:name="Set Payload"/>
      

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

      #[payload.SourceQueue] 
      

      #[payload.PayloadMsgId]
      

      【讨论】:

        猜你喜欢
        • 2021-12-11
        • 1970-01-01
        • 2017-08-27
        • 1970-01-01
        • 1970-01-01
        • 2014-04-20
        相关资源
        最近更新 更多