我试图通过浏览器传递多个查询参数
http://localhost:8081/test?SourceQueue=mqinput&PayloadMsgId=11004a90Test0001-3
我的流程如下所示,我使用set有效负载转换器将查询参数设置为有效负载,然后将这些值传递给存储过程。但我无法从数据库中检索值。在数据库连接器之后,有效负载为空。
流的配置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;请帮忙解决这个问题。
发布于 2016-03-30 14:38:29
你的表情:-
<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"/>设置好之后,您可以在SQL或记录器中的以下表达式中轻松地使用它:- #[flowVars.SourceQueuevar] #[flowVars.PayloadMsgIdvar]
发布于 2016-03-31 21:47:56
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]https://stackoverflow.com/questions/36302901
复制相似问题