【发布时间】:2015-12-03 20:32:19
【问题描述】:
在 Mulesoft 中,如何在 HTTP 驱动的流中获取全局捕获的异常并返回错误代码(而不是不返回任何内容?)基本上我有一个 HTTP 端点(请求/响应),然后生成一个数据库连接。如果 db 连接失败,它会被捕获,但 HTTP 响应会以无法识别的方式响应。例如,强制 500 的优雅方式是什么?谢谢!由
【问题讨论】:
标签: mule
在 Mulesoft 中,如何在 HTTP 驱动的流中获取全局捕获的异常并返回错误代码(而不是不返回任何内容?)基本上我有一个 HTTP 端点(请求/响应),然后生成一个数据库连接。如果 db 连接失败,它会被捕获,但 HTTP 响应会以无法识别的方式响应。例如,强制 500 的优雅方式是什么?谢谢!由
【问题讨论】:
标签: mule
很简单,对于Mule 3.5及更早的版本,你可以在全局异常块中配置HTTP响应生成器并返回状态HTTP码:-http://www.mulesoft.org/documentation/display/33X/HTTP+Response+Builder 和 http://www.mulesoft.org/documentation/display/current/HTTP+Response+Builder
对于 Mule 3.6,您可以按照以下步骤操作:- http://www.mulesoft.org/documentation/display/current/HTTP+Listener+Connector
【讨论】:
如果您的意图只是捕获连接异常并从中发送有意义的消息,您可以尝试类似于以下内容。
让以下代码成为您的选择例外策略的一部分:
<catch-exception-strategy doc:name="Catch Exception Strategy" when="exception.causedBy(java.net.ConnectException)">
<logger level="INFO" message="Caught Connect Exception" doc:name="Logger"/>
<mulexml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT" xsl-file="ExceptionTransformer">
<mulexml:context-property key="MyException" value="#[groovy:message.getExceptionPayload().getRootException.getMessage()]"/>
</mulexml:xslt-transformer>
</catch-exception-strategy>
定义一个 XSLT 转换器,将您的有效负载转换为您想要的 XML。将异常消息作为上下文参数传递,并将其用于形成 XML。基本上,您可以在此 XSLT 中设计您的响应。是否提取并发送异常捕获的消息由您选择。
异常转换器:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="MyException"/>
<xsl:template match="/">
<GenericException>
<faultcode>CE101</faultcode>
<faultstring><xsl:value-of select="$MyException" /></faultstring>
</GenericException>
</xsl:template>
</xsl:stylesheet>
如果您使用mule 3.6,您也可以参考“返回错误消息”部分,这让生活变得更加简单。 http://www.mulesoft.org/documentation/display/current/Exception+Strategy+Most+Common+Use+Cases
【讨论】:
您可以使用批处理选项来保留异常,并在此基础上发回您的自定义响应。
【讨论】: