我使用Mule ESB构建一个api,当我在生产环境(redhat)上部署它时。出现了一个错误。
我有一个uri参数" page" http://localhost:8081/api/assets/33/annotations?page=0
。
在api上,我将该查询参数捕获到变量<set-variable variableName="page" value="#[header:INBOUND:page?]" doc:name="page"/>
然后我尝试捕捉它的流程。但如果我使用#[flowVar.page]
捕获某些时间,即使null
,其值仍为?page=0
。
现在,如果我尝试捕获同一个变量&#39; page&#39;使用#[flowVars['page']]
,永远不会null
。
我的整个流程是
<flow name="get:/assets/{assetsId}/annotations:api-config" initialState="started">
<set-variable variableName="page" value="#[header:INBOUND:page?]" doc:name="page"/>
<jdbc:outbound-endpoint exchange-pattern="request-response" connector-ref="tool_de_anotacao_JDBC" queryKey="get annotations" queryTimeout="-1" doc:name="Database" mimeType="application/json" disableTransportTransformer="true">
<jdbc:transaction action="ALWAYS_BEGIN"/>
<jdbc:query key="get annotations" value="select content from tool.tasset_annotation
where 1 = 1 and assetId = cast(#[flowVars.assetsId] as text)
and CASE WHEN #[flowVars.containsKey('page')] THEN
page = cast(#[flowVars['page']] as integer ) ELSE
1 = 1 END order by id desc;
"/>
</jdbc:outbound-endpoint>
<object-to-string-transformer doc:name="Object to String"/>
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[payload = payload.replaceAll("content=","\"content\":");]]></scripting:script>
</scripting:component>
<message-properties-transformer mimeType="application/json" doc:name="Message Properties"/>
</flow>
这是错误还是我做错了什么?
我无法在我的Windows环境中重播该错误,
非常感谢你的帮助。
此致 瓦尔特·戈麦斯
答案 0 :(得分:0)
这两种语法都是访问地图数据的有效方法。 MEL基于MVEL。有关房产导航的更多信息:http://mvel.codehaus.org/MVEL+2.0+Property+Navigation#MVEL2.0PropertyNavigation-MapAccess
可能有帮助的一件事就是改变你首先设置变量的方式。您正在使用已弃用的语法。尝试:
<set-variable variableName="page" value="#[message.inboundProperties.?page]" doc:name="page"/>
答案 1 :(得分:0)
这似乎是3.5.3中修复的问题: