Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Exception Mule 3.9中异常和中断流的处理_Exception_Mule_Mule Esb - Fatal编程技术网

Exception Mule 3.9中异常和中断流的处理

Exception Mule 3.9中异常和中断流的处理,exception,mule,mule-esb,Exception,Mule,Mule Esb,我确实对Mule 3.9中的一个案例有问题。 我用.this.raml文件生成了API。 其中一个端点是justget with“/”路由(用于测试目的)。 在这个流中(管理GET/),我想调用另一个流来检查sth(在我的例子中是JWT验证)。当有效时,我希望传递,并返回原始有效负载。当无效时,我在Groovy中调用一个异常,这确实发生了,但毕竟,它涉及到相同的原始有效负载,它不应该是可见的 让我们编写一些代码: 源流: <flow-ref name="validate_j


我确实对Mule 3.9中的一个案例有问题。 我用.this.raml文件生成了API。 其中一个端点是justget with“/”路由(用于测试目的)。 在这个流中(管理GET/),我想调用另一个流来检查sth(在我的例子中是JWT验证)。当有效时,我希望传递,并返回原始有效负载。当无效时,我在Groovy中调用一个异常,这确实发生了,但毕竟,它涉及到相同的原始有效负载,它不应该是可见的

让我们编写一些代码:

源流:

        <flow-ref name="validate_jwt_token" doc:name="Validate JWT"/>

        <set-payload value=" { &quot;message&quot; : &quot;API is working!&quot;}" doc:name="Set Payload" mimeType="application/json" />
    </flow>

和流程参考:

<flow name="validate_jwt_token">
        <logger message="Request found with Authorization: #[message.inboundProperties['authorization']]" level="INFO" doc:name="Loger Authorization"/>
        <component doc:name="Validate JWT Token">
            <spring-object bean="ValidateJWTEvent"/>
        </component>
        <choice doc:name="Choice">
             <when expression="(payload == true)">
                <logger message="JWT valid. Access granted." level="INFO" doc:name="Logger"/>
            </when>
             <otherwise>

                <scripting:component doc:name="Throw Exception">
                    <scripting:script engine="Groovy"><![CDATA[throw new Exception('Invalid JWT Token.')]]></scripting:script>
                </scripting:component>
            </otherwise>
        </choice>
          <catch-exception-strategy doc:name="Catch Exception Strategy">
            <set-property propertyName="http.status" value="401" doc:name="Set 401 status"/>
            <flow-ref name="commons.exceptionStrategy.logError" doc:name="Log errors"/>
        </catch-exception-strategy>


    </flow>

即使这个令牌实际上是无效的,我也会得到与文本“API正在工作”相同的负载。我要做的是捕获异常并返回HTTP错误。没别的了

我还附上了我的例外策略。请记住,它基于APIKIT,生成了我的Mule itselft.raml文件

 <sub-flow name="commons.exceptionStrategy.logError">
        <logger message="Error: #[exception.?cause.message or exception]" level="ERROR" doc:name="Logger" />

        <set-property propertyName="Content-Type" value="application/json" doc:name="Set Content Type"/>
        <flow-ref name="log_params" doc:name="log_params"/>
        <logger message="#[org.apache.commons.lang3.StringEscapeUtils.escapeJson(exception.?getCauseException().?getMessage())]" level="ERROR" doc:name="Display error"/>
        <set-payload value="{ &quot;responseHeader&quot;: { &quot;requestId&quot;: &quot;#[flowVars.storedRequestId]&quot;, &quot;sendDate&quot;: &quot;#[function:now]&quot;}, &quot;code&quot;: &quot;#[flowVars.'statusCode']&quot;, &quot;message&quot;: &quot;#[flowVars.errorMessage or org.apache.commons.lang3.StringEscapeUtils.escapeJson(exception.?getCauseException().?getMessage())]&quot; }" doc:name="Set Error Message"/>
     </sub-flow>

 <sub-flow name="log_params">

<logger message="API| endpoint executed with payload: #[message.payload]" level="INFO" doc:name="log payload"/>
        <logger message="API| endpoint executed with flowVars: #[flowVars]" level="INFO" doc:name="log params"/>

        </sub-flow>

整个API由APIKIT my Mule使用全局捕获异常策略使用


伙计们,请帮帮我。

这看起来像是在抛出异常的同一流程中捕获异常。因此,由于处理了异常,因此不会传播该异常,也不会中断流。尝试改用回滚异常策略,该策略将修改负载,但将异常传播到调用方流ref并中断该流。HTH

请显示异常策略,以了解如何处理错误。完成。我编辑了上面的这篇文章。