错误 Propagate/Transform 消息组件不会覆盖 Mule4 的默认行为
Error Propagate/Transform message component doesn't overwrite default behaviour of Mule4
我已经使用 APIKIT 路由器创建了我的流。 raml主流+post://XX流。主流程和我的 POSt 流程有错误处理程序组件
主要流程:
<flow name="raml-main">
<http:listener .....">
<http:response statusCode="#[vars.httpStatus default 200]">
<http:body ><![CDATA[ ]]></http:body>
<http:headers><![CDATA[#[vars.outboundHeaders default {}]]]></http:headers>
</http:response>
<http:error-response statusCode="#[vars.httpStatus default 500]">
<http:body ><![CDATA[#[output application/json --- error.description]]]>
</http:body>
<http:headers><![CDATA[#[vars.outboundHeaders default {}]]]>
</http:headers>
</http:error-response>
</http:listener>
<apikit:router config-ref="raml-config" />
<error-handler>
<on-error-propagate type="APIKIT:BAD_REQUEST">
<logger level="INFO" doc:name="Logger" doc:id="aa51777e-c1c6-42d2-ba68-b51c45c9aeac" message="Im in MAIN FLOWWWW"/>
<ee:transform xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd" doc:id="4f00abf2-0b58-419e-8d9a-d3ef60e356ac">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{message: "BadMAIN request"}]]></ee:set-payload>
</ee:message>
<ee:variables>
<ee:set-variable variableName="httpStatus"><![CDATA[400]]></ee:set-variable>
</ee:variables>
</ee:transform>
</on-error-propagate>
POST 流量
<flow name="post:\notifications:raml-config">
<json:validate-schema doc:name="Validate schema" doc:id="e447c719-60e2-4f34-aeb9-0b446a1a5eda" schema="schemas/event.json"/>
<choice>
.............................
</choice>
<error-handler >
<on-error-propagate type="JSON:SCHEMA_NOT_HONOURED" enableNotifications="true" logException="true">
<logger level="INFO" doc:name="Logger" doc:id="c818b292-5d89-48eb-aa8d-b7918daa8f0c" message="It is under post flow"/>
<ee:transform xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd" doc:id="e8fb927d-edb8-405a-b853-600b4788b719">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{message: "Bad Request"}]]></ee:set-payload>
</ee:message>
<ee:variables>
<ee:set-variable variableName="httpStatus"><![CDATA[400]]></ee:set-variable>
</ee:variables>
</ee:transform>
</on-error-propagate>
</error-handler>
</flow>
如果我在 POST 流程或 RAML 主流程的转换处理器下更新有效载荷,它永远不会反映在输出中。假设目前我收到 400 个错误请求。
在转换组件中,如果我更改消息,我不会收到修改后的消息。
这是为什么?
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{message: "Bad Request USER ERRROR.."}]]></ee:set-payload>
</ee:message>
RAML 配置
/notifications:
post:
headers:
Authorization:
required: false
type: string
responses:
'200':
description: OK
'400':
description: BAD REQUEST
'401':
description: NOT AUTHORIZED
400表示没有这样的终点。这意味着您的流程永远不会被调用。 Mule 正在监听另一个端点。
幸运的是 Mule 报告说 url 是错误的,并且它正在监听什么样的 urls。像这样
INFO 2020-05-07 07:32:22,539 [http.listener.06 SelectorRunner] org.mule.service.http.impl.service.util.DefaultRequestMatcherRegistry: No listener found for request: (GET)/badurl
INFO 2020-05-07 07:32:22,539 [http.listener.06 SelectorRunner] org.mule.service.http.impl.service.util.DefaultRequestMatcherRegistry: Available listeners are: [([*])/console/*, ([*])/, ([*])/api/*]
当然,如果您访问了另一台服务器或另一端口或协议,则此请求一无所知。但是,既然你有答案 - 400 - 那么你可能会访问你的服务器。
https://simpleflatservice.com/mule4/Recognize400Error.html
也可以在响应 - 错误响应部分的 http 侦听器中设置默认错误处理程序和响应
HTTP 响应 400 错误请求表示 HTTP 请求与预期格式不匹配。 APIKit 可能正在根据 RAML 验证请求。在这种情况下,APIKit 将引发错误并且不会执行 post:\notifications:raml-config
流。您是否确认流程已执行,例如使用记录器?
我已经使用 APIKIT 路由器创建了我的流。 raml主流+post://XX流。主流程和我的 POSt 流程有错误处理程序组件
主要流程:
<flow name="raml-main">
<http:listener .....">
<http:response statusCode="#[vars.httpStatus default 200]">
<http:body ><![CDATA[ ]]></http:body>
<http:headers><![CDATA[#[vars.outboundHeaders default {}]]]></http:headers>
</http:response>
<http:error-response statusCode="#[vars.httpStatus default 500]">
<http:body ><![CDATA[#[output application/json --- error.description]]]>
</http:body>
<http:headers><![CDATA[#[vars.outboundHeaders default {}]]]>
</http:headers>
</http:error-response>
</http:listener>
<apikit:router config-ref="raml-config" />
<error-handler>
<on-error-propagate type="APIKIT:BAD_REQUEST">
<logger level="INFO" doc:name="Logger" doc:id="aa51777e-c1c6-42d2-ba68-b51c45c9aeac" message="Im in MAIN FLOWWWW"/>
<ee:transform xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd" doc:id="4f00abf2-0b58-419e-8d9a-d3ef60e356ac">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{message: "BadMAIN request"}]]></ee:set-payload>
</ee:message>
<ee:variables>
<ee:set-variable variableName="httpStatus"><![CDATA[400]]></ee:set-variable>
</ee:variables>
</ee:transform>
</on-error-propagate>
POST 流量
<flow name="post:\notifications:raml-config">
<json:validate-schema doc:name="Validate schema" doc:id="e447c719-60e2-4f34-aeb9-0b446a1a5eda" schema="schemas/event.json"/>
<choice>
.............................
</choice>
<error-handler >
<on-error-propagate type="JSON:SCHEMA_NOT_HONOURED" enableNotifications="true" logException="true">
<logger level="INFO" doc:name="Logger" doc:id="c818b292-5d89-48eb-aa8d-b7918daa8f0c" message="It is under post flow"/>
<ee:transform xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd" doc:id="e8fb927d-edb8-405a-b853-600b4788b719">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{message: "Bad Request"}]]></ee:set-payload>
</ee:message>
<ee:variables>
<ee:set-variable variableName="httpStatus"><![CDATA[400]]></ee:set-variable>
</ee:variables>
</ee:transform>
</on-error-propagate>
</error-handler>
</flow>
如果我在 POST 流程或 RAML 主流程的转换处理器下更新有效载荷,它永远不会反映在输出中。假设目前我收到 400 个错误请求。
在转换组件中,如果我更改消息,我不会收到修改后的消息。
这是为什么?
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{message: "Bad Request USER ERRROR.."}]]></ee:set-payload>
</ee:message>
RAML 配置
/notifications:
post:
headers:
Authorization:
required: false
type: string
responses:
'200':
description: OK
'400':
description: BAD REQUEST
'401':
description: NOT AUTHORIZED
400表示没有这样的终点。这意味着您的流程永远不会被调用。 Mule 正在监听另一个端点。 幸运的是 Mule 报告说 url 是错误的,并且它正在监听什么样的 urls。像这样
INFO 2020-05-07 07:32:22,539 [http.listener.06 SelectorRunner] org.mule.service.http.impl.service.util.DefaultRequestMatcherRegistry: No listener found for request: (GET)/badurl
INFO 2020-05-07 07:32:22,539 [http.listener.06 SelectorRunner] org.mule.service.http.impl.service.util.DefaultRequestMatcherRegistry: Available listeners are: [([*])/console/*, ([*])/, ([*])/api/*]
当然,如果您访问了另一台服务器或另一端口或协议,则此请求一无所知。但是,既然你有答案 - 400 - 那么你可能会访问你的服务器。
https://simpleflatservice.com/mule4/Recognize400Error.html
也可以在响应 - 错误响应部分的 http 侦听器中设置默认错误处理程序和响应
HTTP 响应 400 错误请求表示 HTTP 请求与预期格式不匹配。 APIKit 可能正在根据 RAML 验证请求。在这种情况下,APIKit 将引发错误并且不会执行 post:\notifications:raml-config
流。您是否确认流程已执行,例如使用记录器?