2

Mule フローには、.edi ファイルを読み取り、xml ファイルを生成するファイル インバウンド エンドポイントがあります。edi ファイルの解析中に例外がスローされた場合は、それをキャッチしてカスタム エラー メッセージをスプリング コントローラーに送信し、そこからミュール フローが呼び出されるようにする必要があります。ラバ統合スプリングプロジェクトでこれを行う方法は?

以下は、私のミュールフローのエンドポイントです。

    <file:inbound-endpoint path="D:\smooks\test docs\in"
        pollingFrequency="3000" responseTimeout="10000" doc:name="Incoming File"
        transformer-refs="SmooksTransformer">
        <file:filename-regex-filter pattern="(.*).edi"
            caseSensitive="false" />
    </file:inbound-endpoint>
    <file:outbound-endpoint path="D:\smooks\test docs\out" responseTimeout="10000" 
        doc:name="Outgoing File" outputPattern="#[header:originalFilename].xml"/>
4

2 に答える 2

1

フローを共有したことを確認すると、この「ミュール フローが呼び出されるスプリング コントローラー」は意味がありません。ファイル インバウンド エンドポイントはポーラーであり、定期的に起動するため、フローを呼び出す方法も必要もありません。呼び出す必要はありません。

このフローは同期的に呼び出されないため、例外がスローされた場合に通知されるカスタム コードを保持する唯一の方法は、Mule 通知をリッスンすることです。[org.mule.context.notification.ExceptionNotification][1]コントローラー Bean でメソッドをリッスンして呼び出すリスナーを作成すると、うまくいくはずです。

ただし、Mule を開始する方法が問題になります。独自のコンテキストで開始するため、Mule で定義された Bean は既存の Spring アプリケーション コンテキストの Bean に到達する方法がありません。このドキュメンテーションページでは、Mule アプリケーション コンテキストを既存の Spring コンテキストの子にすることでこれを解決する方法について説明します。これにより、コントローラの呼び出しが可能になります。

これがあなたにとって複雑すぎる場合。ここに代替手段があります: 一方向の VM キューにエラーを送信する例外戦略をフローに追加し、Spring コントローラーにmuleClientBean を使用させて、この VM キューのコンテンツを定期的にポーリングさせます ( を使用request())。そうすれば、エラーをメインの Spring コンテキストに戻すことができます。

于 2013-09-18T19:50:28.540 に答える