代码之家  ›  专栏  ›  技术社区  ›  Seshadri VS

Mulesoft-如何在异常对象中找到Http错误负载?

  •  0
  • Seshadri VS  · 技术社区  · 6 年前

    如何在异常对象中找到Http错误负载?

    系统1->调用的Mule服务器。Mule服务器->Docusign/其他服务器。

    Docusign/有人用json负载返回400个错误(包括errorCode等)

    我需要把确切的细节返回系统1。

    我该怎么做?

    1)我试过在成功代码200..599中添加所有代码,然后即使是错误也有200 ok。这将导致更多的问题,因为我必须添加许多选择路由,因为有些流有更多的数据转换。

    2)理想解决方案->照常引发异常。这必须在选择异常中捕获。现在我必须将相同的状态代码和json响应发送回调用方。

    问题-?如何在异常对象中找到HTTP返回的负载。存储在异常对象中的位置。

    1 回复  |  直到 6 年前
        1
  •  1
  •   star    6 年前

    下面是示例-处理此类场景的一种方法,使用 validation Component 通过异常处理或通过APIKIT异常处理在主流中引发异常和捕获

     <flow name="routeexceptionFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP"/>
        <logger level="INFO" doc:name="Logger"/>
        <http:request config-ref="HTTP_Request_Configuration" path="/in" method="POST" doc:name="HTTP">
            <http:success-status-code-validator values="200..599"/>
        </http:request>
        <validation:is-false config-ref="Validation_Configuration" message="#[payload]" exceptionClass="nz.co.exception.BadRequestException" expression="#[message.inboundProperties['http.status'] ==400]" doc:name="Validate Bad Request"/>
        <validation:is-false config-ref="Validation_Configuration" message="#[payload]" expression="#[message.inboundProperties['http.status'] !=200]" doc:name="Capture all other Exceptions"/>
        <choice-exception-strategy doc:name="Choice Exception Strategy">
            <catch-exception-strategy when="#[exception.causeMatches('nz.co.exception.BadRequestException')]" doc:name="Catch Exception Strategy">
                <set-payload value="#[exception.message]" doc:name="Set Payload"/>
                <logger level="INFO" doc:name="Logger"/>
            </catch-exception-strategy>
            <catch-exception-strategy doc:name="Catch Exception Strategy">
                <logger message="****log all other exception****" level="INFO" doc:name="Logger"/>
            </catch-exception-strategy>
        </choice-exception-strategy>
    </flow>
    

    将这个类添加到java文件夹中

      package nz.co.exception;
    
       public class BadRequestException extends Exception {
       private static final long serialVersionUID = 8546839078847602529L;
    
        public BadRequestException() {
        super();
        }
    
        public BadRequestException(String message) {
        super(message);
        }
    
       public BadRequestException(Throwable t) {
        super(t);
       }
    
      public BadRequestException(String message, Throwable t) {
        super(message, t);
      }
    }
    

    在您的项目中,如果您使用的是APIKIT路由器,那么不要像上面那样使用异常处理,直接添加 nz.co.exception.BadRequestException 在400中返回代码apikitExceptionHandling。