0

これはかなり一般的なことのように思えますが、それを機能させる方法を理解するのに苦労しています。インバウンドの http エンドポイントを持つリクエスト/レスポンス フロー用のカスタム フィルターを作成しました。カスタム フィルターは、特定の必須クエリ パラメーターが存在し、有効な値が含まれているかどうかを確認します。フィルターがメッセージを拒否した場合、HTTP エラー ステータス コードを返したいのですが、別の応答を送信する方法がわかりません。

Mule のドキュメントには次のように書かれています。

フローで定義されたインバウンド エンドポイントに要求と応答の交換パターンがあり、フローに応答ブロックがない場合、使用される応答は単にフロー内の最後の Message Processor からの結果であり、null になります。

これが完全に正確かどうかはわかりません。フローには<response>ブロックがありますが、カスタム フィルターが false を返すと呼び出されません。

フィルターがメッセージを拒否した場合に別の応答を返す最善の方法は何ですか?

これが私のフローの例です:

<flow name="Incoming_requests">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="incoming" />

    <http:body-to-parameter-map-transformer />

    <custom-filter class="com.mycompany.MyQueryParamFilter"/>

    <!--  Process valid messages here -->

    <response>
       <!--  Return a successful response  -->
    </response>
</flow>

<response>編集: これは、ブロックが実行される と推測したドキュメントです。http://www.mulesoft.org/documentation/display/MULE3USER/Using+Filters#UsingFilters-UsinginFlows

4

1 に答える 1

0

あなたの場合、選択ルーターを使用する方が良いでしょう:

<choice>
  <when expression="...validation expression...">
    <!--  Process valid messages here -->
    <!--  Return a successful response  -->
  </when>
  <otherwise>
    <!--  Return a failure response  -->
  </otherwise>
</choice>    

が の最後にresponseある場合、要素は必要ありません。choiceflow

于 2012-07-16T19:41:29.707 に答える