Компонент сообщения Error Propagate / Transform не перезаписывает поведение Mule4 по умолчанию - PullRequest
0 голосов
/ 07 мая 2020

Я создал свои потоки с помощью APIKIT Router. Основной поток raml + post: // XX flow. Основной поток и мой поток POSt имеют компоненты обработчика ошибок

MAIN FLOW:

<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

<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>

Если я обновляю полезную нагрузку в разделе Transform processor в потоке POST или RAML Основной поток, он никогда не отражается на выходе. Скажем, в настоящее время я получаю неверный запрос 400.

В компоненте Transform, если я изменяю сообщение, я не получаю измененное сообщение.

Почему?

<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

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Неверный запрос ответа HTTP 400 означает, что запрос HTTP не соответствует ожидаемому формату. Возможно, APIKit проверяет запрос на соответствие RAML. В этом случае APIKit вызовет ошибку и не выполнит поток post:\notifications:raml-config. Вы подтвердили, что поток выполняется, например, с помощью регистратора?

0 голосов
/ 07 мая 2020

400 означает, что такой конечной точки нет. Это означает, что ваш поток никогда не вызывается. Есть еще одна конечная точка, которую ожидает Мул. К счастью, Mule сообщает, что URL-адрес неверен и какие URL-адреса он прослушивает. Вот так

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 слушатель в разделе Ответы - Ответ на ошибку

enter image description here

...