我是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文件夹中创建一个数据文件。流程的其余部分不会被执行。流应该在此文件夹上轮询以获取文件。
提前致谢!
答案 0 :(得分:2)
从file
端点请求时,超时参数无效:Mule不会等待文件出现。
这意味着您的测试不会阻止并始终失败。解决问题的最简单/最简化的方法是循环{ Thread.wait(); client.request(); }
,直到获得非空message
,即直到xmlOut
中的文件被读取为止。
无需添加重试计数器:Mule的FunctionalTestCase
将在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();