我有一个全局http侦听器。我所有的API调用都使用了此侦听器。当API调用之一由于任何json解析问题而失败时?那么所有其他API调用也会失败。并且失败的api调用或代码流不会在其他api调用中使用。直到我们再次重新启动运行时(MULE ESB独立),所有后续API请求均失败。
遵循我们已实施的全局例外策略。
<choice-exception-strategy name="globalException">
<catch-exception-strategy when="#[exception.causedBy(org.mule.module.http.internal.request.ResponseValidatorException) && message.inboundProperties.'http.status'==409]" doc:name="Catch Exception Strategy">
<set-payload value="{"error": "File Not Downloaded."}" doc:name="Set Payload"/>
</catch-exception-strategy>
<catch-exception-strategy when="#[exception.causedBy(org.mule.module.http.internal.request.ResponseValidatorException)]" doc:name="Catch Exception Strategy">
<set-payload value="{"error": "Your Search Did Not Fetch Anything!"}" doc:name="Set Payload"/>
</catch-exception-strategy>
<catch-exception-strategy when="#[exception.causedBy(java.sql.SQLException)]" doc:name="Catch Exception Strategy">
<set-payload value="{"error": "Malformed Query "}" doc:name="Set Payload"/>
</catch-exception-strategy>
<catch-exception-strategy when="#[exception.causedBy(org.mule.api.transformer.TransformerException) && 501==flowVars.errorCode]" doc:name="Catch Exception Strategy">
<set-payload value="{"error": "File Not Downloaded. "}" doc:name="Set Payload"/>
</catch-exception-strategy>
<catch-exception-strategy when="#[exception.causedBy(org.mule.api.transformer.TransformerException) && 404==flowVars.errorCode]" doc:name="Catch Exception Strategy">
<set-payload value="{"error": "Unauthorized To Download "}" doc:name="Set Payload"/>
</catch-exception-strategy>
<catch-exception-strategy when="#[exception.causedBy(org.mule.api.transformer.TransformerException) && 401==flowVars.errorCode]" doc:name="Catch Exception Strategy">
<set-payload value="{"error": "Unauthorized Access "}" doc:name="Set Payload"/>
</catch-exception-strategy>
<catch-exception-strategy when="#[exception.causedBy(org.mule.api.MessagingException) && 127==flowVars.con_id]" doc:name="Catch Exception Strategy">
<set-payload value="{"error": "Did Not Fetch Anything!"}" doc:name="Set Payload"/>
</catch-exception-strategy>
<catch-exception-strategy when="#[exception.causedBy(org.mule.api.MessagingException)]">
<set-payload value="{"error": "Invalid Credentials Cannot Proceed Further"}" doc:name="Set Payload"/>
</catch-exception-strategy>
<catch-exception-strategy doc:name="Catch Exception Strategy">
<set-payload value="{"error": "#[exception.getMessage().replaceAll("\'","").replaceAll("\"","").replaceAll("\n","")]"}" doc:name="Set Payload"/>
</catch-exception-strategy>
</choice-exception-strategy>
下面是我们解析输入json的方式。
<set-payload value="#[payload.data]" mimeType="application/json" doc:name="Set Payload"/>
<set-variable variableName="structure" value="#[json:structure]" doc:name="Variable"/>
<set-variable variableName="jsonRequestData" value="#[payload]" doc:name="Variable"/>
<expression-component doc:name="Expression"><![CDATA[String input = payload;
payload = new org.json.JSONObject(input);]]></expression-component>
<json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
这不是在本地环境中发生的。有任何调试此问题的线索吗?
在此方面,您的帮助受到高度赞赏。
答案 0 :(得分:0)
我正试图了解您的代码的行为方式,您能回答这些问题吗?
策略使用什么例外?您如何解析JSON ..
是某些转换器还是Dataweave?如果您使用的是Transformer,
您要处理org.mule.api.transformer.*
异常吗?
'com.mulesoft.weave.*'
例外? 现在您可以尝试一下。在API调用期间,您是否使用了任何成功状态验证代码?应在HTTP组件->高级->中进行配置,并输入200..599
<http:success-status-code-validator values="200..599"/>