Menangani pengecualian dan interupsi aliran di Mule 3.9


Saya punya masalah dengan satu kasus di Mule 3.9. Saya membuat API saya dengan file .this .raml. Salah satu titik akhir hanyalah GET dengan rute "/" (untuk tujuan pengujian). Dalam aliran ini (mengelola GET /) saya ingin memanggil aliran lain untuk memeriksa sth (Dalam kasus saya validasi JWT). Jika valid, saya ingin meneruskan, dan mengembalikan muatan asal. Jika tidak valid, saya memanggil pengecualian di Groovy, yang memang terjadi, tetapi bagaimanapun juga, ini berasal dari payload asal yang sama, yang seharusnya tidak terlihat.

Mari kita buat beberapa kode:

aliran asal:

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

dan referensi aliran:

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

Dan meskipun token ini sebenarnya tidak valid, saya mendapatkan muatan yang sama dengan teks "API BERFUNGSI". Yang ingin saya lakukan adalah menangkap pengecualian dan mengembalikan HTTP ERROR. Tidak ada lagi.

Saya melampirkan Strategi Pengecualian saya juga. Harap diingat, ini berbasis di APIKIT, menghasilkan file .raml Mule saya sendiri.

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

Seluruh API digunakan oleh APIKIT My Mule dengan Strategi Pengecualian Tangkapan Global.

Tolong bantu saya teman-teman.


person deyvw    schedule 23.03.2020    source sumber
comment
Harap tunjukkan strategi pengecualian untuk memahami bagaimana kesalahan ditangani.   -  person aled    schedule 23.03.2020
comment
Selesai. Saya telah mengedit posting di atas ini.   -  person deyvw    schedule 25.03.2020


Jawaban (1)


Sepertinya Anda menangkap pengecualian dalam aliran yang sama saat Anda melemparkannya. Oleh karena itu, tidak disebarkan dan aliran tidak terganggu sejak pengecualian ditangani. Coba gunakan strategi pengecualian pengecualian, yang akan mengubah payload tetapi menyebarkan pengecualian ke referensi aliran pemanggil dan mengganggu aliran tersebut. HTH

person afelisatti    schedule 03.04.2020