1

我是 Mule ESB 的新手。

我有以下来自拼写检查器教程的 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 不会等待文件出现。

这意味着您的测试不会阻塞并且总是失败。解决问题的最简单/不太完善的方法是循环 a{ Thread.wait(); client.request(); }直到你得到一个非 null message,即直到文件 inxmlOut被读取。

无需添加重试计数器:Mule'sFunctionalTestCase将在测试结束后自动失败getTestTimeoutSecs()(默认为 60 秒)。

旁注:

  • 为了使您的配置在我的环境中工作,我必须在 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 回答