我试图通过浏览器传递多个查询参数
http://localhost:8081/test?SourceQueue=mqinput&PayloadMsgId=11004a90Test0001-3
我的流程如下, 我使用set payload transformer将查询参数设置为有效负载,然后将这些值传递给存储过程。但我无法从数据库中检索值。数据库连接器后有效内容为null。
流程的 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;
请帮忙解决此问题。
答案 0 :(得分:0)
你的表达: -
<set-payload value="SourceQueue=#[message.inboundProperties.'http.query.params'.SourceQueue],PayloadMsgId=#[message.inboundProperties.'http.query.params'.PayloadMsgId]" doc:name="Set Payload"/>
不正确,您无法通过将其设置为有效负载来实现此目的,因为有效负载是现在的String格式而不是Object。
理想的解决方案是使用变量,如下所示: -
<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 或 logger 中的任何位置使用它,例如: - #[flowVars.SourceQueuevar] #[flowVars.PayloadMsgIdvar]
答案 1 :(得分:0)
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]