问这个mulesoft专业知识。
以下异常映射策略应该在hhtp.status 401,403,429上进行分支,但是继续进入状态代码401和403的401分支(至少,并且由调试和写入控制台的日志确定) :
<apikit:mapping-exception-strategy doc:name="waysact-adaptor-main-exception-strategy">
<apikit:mapping statusCode="401">
<apikit:exception value="org.mule.module.http.internal.request.ResponseValidatorException"/>
<logger message="psc>>> logging 401 = #[payload]" level="INFO" doc:name="log-http-401"/>
</apikit:mapping>
<apikit:mapping statusCode="403">
<apikit:exception value="org.mule.module.http.internal.request.ResponseValidatorException"/>
<logger message="psc>>> logging 403 = #[payload]" level="INFO" doc:name="log-http-403"/>
</apikit:mapping>
<apikit:mapping statusCode="429">
<apikit:exception value="org.mule.module.http.internal.request.ResponseValidatorException"/>
<logger message="psc>>> logging 429 = #[payload]" level="INFO" doc:name="log-http-429"/>
</apikit:mapping>
<apikit:mapping statusCode="400">
<apikit:exception value="org.mule.module.http.internal.request.ResponseValidatorException"/>
<logger message="psc>>> logging anything = #[payload]" level="INFO" doc:name="logging-anything"/>
</apikit:mapping>
</apikit:mapping-exception-strategy>
是因为它仅在异常类型org.mule.module.http.internal.request.ResponseValidatorException上进行分支?我认为这是为了分支状态代码?
还有另一种策略,即选择 - 异常策略,它应该分支在不同的异常对象类型上。
答案 0 :(得分:0)
APIkit根据定义的异常值匹配异常,而不是由定义的statusCode匹配。使用选择异常策略并在其中定义多个catch异常策略。确保每个catch异常策略都匹配一个唯一的异常,以便为正确的http.status代码和所需的异常有效负载提供方法。
例如,如果要抛出400,请确保catch异常策略与BadrequestException匹配。如果状态代码来自HTTP请求者,则匹配ResponseValidatorException并设置传入的http.status和异常有效负载
答案 1 :(得分:0)
基于http.status的异常分支可以使用选择异常策略定义,如下例所示,
<choice-exception-strategy doc:name="Choice Exception Strategy">
<catch-exception-strategy when="#[message.inboundProperties.'http.status'=='404']" doc:name="Catch Exception Strategy" >
<logger message="Exceptions message is ... #[exception.message]" level="ERROR" doc:name="exceptionLogger"/>
<set-variable variableName="exceptionMessage" value="#[exception.message]" doc:name="Set exceptionMessage"/>
<set-payload value="{ errors: { errorCode: #[message.inboundProperties.'http.status'], errorMessage: #[flowVars.exceptionMessage] } }" doc:name="Set Exception Payload"/>
</catch-exception-strategy>
<catch-exception-strategy doc:name="Catch Exception Strategy" >
<logger message="Exception message is ... #[exception.message]" level="ERROR" category="com.project.stacktrace" doc:name="exceptionLogger"/>
<set-variable variableName="exceptionMessage" value="#[exception.message]" doc:name="Set exceptionMessage"/>
<set-payload value="{ errors: { errorCode: #[message.inboundProperties.'http.status'], errorMessage: #[flowVars.exceptionMessage] } }" doc:name="Set Exception Payload"/>
</catch-exception-strategy>
</choice-exception-strategy>