1

Mule ESB は初めてです。

Spell Checker チュートリアルから取得した Mule 用の次の構成ファイルがあります。

<file:connector name="FILE" streaming="false" doc:name="File" autoDelete="true" validateConnections="false"/>
<flow name="SpellCheckerFlow1" doc:name="SpellCheckerFlow1">        
    <file:inbound-endpoint connector-ref="FILE" path=".\xmlIn" pollingFrequency="3000" responseTimeout="10000" doc:name="Incoming File" moveToDirectory=".\xmlProcessed"/>
    <http:outbound-endpoint exchange-pattern="request-response" host="www.google.com/tbproxy/spell?lang=en" port="80" doc:name="Invoke API"/>
    <echo-component doc:name="Echo"/>
    <file:outbound-endpoint path=".\xmlOut" outputPattern="#[function:datestamp:dd-MM-yy]_#[function:systime].xml" responseTimeout="10000" doc:name="File"/>
</flow>

FunctionalTestCaseクラスを拡張して、このフローをテストしようとしています。以下は、私がそれを行うために使用している抽出されたコードです。

MuleClient client = new MuleClient(muleContext);        
client.dispatch("file://./xmlIn", "<valid_xml />", null);
MuleMessage message = client.request("file://./xmlOut", 1000000000);

このコードを実行すると、/xmlIn フォルダーにデータ ファイルが作成されます。残りのフローは実行されません。フローは、このフォルダーをポーリングしてファイルを取得する必要があります。

前もって感謝します!

4

1 に答える 1

2

エンドポイントからリクエストする場合、タイムアウト パラメータは無効fileです。Mule は、ファイルが表示されるのを待ちません。

これは、テストがブロックされず、常に失敗することを意味します。この問題を解決するための最も簡単で洗練されていない方法は、{ Thread.wait(); client.request(); }null 以外を取得するmessageまで、つまり のファイルxmlOutが読み込まれるまで a をループすることです。

再試行カウンターを追加する必要はありません。Muleは、経過後 (デフォルトでは 60 秒) FunctionalTestCase、自動的にテストに失敗します。getTestTimeoutSecs()

補足:

  • 私の環境で設定を機能させるには、XML 設定のファイル パスの を.\に置き換える必要がありました。./

  • アウトバウンド HTTP エンドポイントが正しく構成されていません:pathが に混在しています。host代わりに次を使用してください:

    <http:outbound-endpoint exchange-pattern="request-response"
        host="www.google.com" path="tbproxy/spell?lang=en" port="80"
        doc:name="Invoke API" />
    
  • この方法で Mule クライアントを取得する方が少し効率的です。

    MuleClient muleClient = muleContext.getClient();
    
于 2013-01-29T02:04:24.540 に答える