Mule 从异常策略返回json编码的有效负载

Mule 从异常策略返回json编码的有效负载,mule,Mule,我正在试验使用Mule 3.4.0CE来提供RESTful API,并评估Jersey和Rest路由器模块来处理此问题。这在很大程度上进展顺利,但我在Mule中实现RESTful API的具体/完整示例方面没有找到多少 目前,我为使用rest路由器的实体提供了简单的GET和PUT端点。PUT流成功地将内容传递给JDBC,但我对如何处理实体已经存在的情况感到困惑 我可以依靠SqlException来捕获pk约束冲突,并使用异常策略来处理: <catch-exception-strategy

我正在试验使用Mule 3.4.0CE来提供RESTful API,并评估Jersey和Rest路由器模块来处理此问题。这在很大程度上进展顺利,但我在Mule中实现RESTful API的具体/完整示例方面没有找到多少

目前,我为使用rest路由器的实体提供了简单的GET和PUT端点。PUT流成功地将内容传递给JDBC,但我对如何处理实体已经存在的情况感到困惑

我可以依靠SqlException来捕获pk约束冲突,并使用异常策略来处理:

<catch-exception-strategy when="#[exception.causedBy(java.sql.SQLException) and exception.getCauseException().getMessage().contains('Duplicate entry')]" doc:name="Duplicate_entry1">
          <set-payload value="The request cannot be processed, the error is #[exception.getSummaryMessage()]" doc:name="Set Payload"/> <!-- [1] -->
          <set-property propertyName="http.status" value="400" doc:name="Property"/> <!-- [2] -->
</catch-exception-strategy>

但我对两件事感到困惑:

1) 捕获更具体的异常? 我能够在java.sql.SQLException上获得匹配的异常策略,但更愿意匹配com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException的根本原因。使用该类和CauseSedby()的各种形式,causedExactlyBy()和CauseMatches()似乎只能找到外部SQLException

2) 如何返回一个简单的json编码的有效负载来响应此错误? 在catch异常策略中,我想做的是创建KV对的映射,比如status=“error”和error\u message=“entity XX ready exists”,并将该json编码为mule负载/响应

我感到尴尬的是,我似乎无法通过MEL或MuleStudio中的各种组件来实现这一点。寻找关于如何做到这一点的指针或文档。我拒绝构建一个自定义组件来返回我想要的映射,并在退出Mule的过程中对json进行编码

对于2)您可以查看

对于1)在when子句中,可以使用org.mule.util.ExceptionUtils的containsType()方法(构建在Apache ExceptionUtils类之上)。它检查整个stacktrace是否存在特定异常。
如果您不想在MEL中提供完全限定的类名(对于ExceptionUtils),可以使用全局导入功能,如本部分最后一部分所述。


我已经发表了两篇关于Mule上RESTful服务的博文(&)。也许,您会发现它们很有用。

json transformer的对象将执行您想要的操作,只需确保为它提供映射类型的负载即可。