如何用以下流程纠正问题?

时间:2013-01-31 14:22:59

标签: mule mule-studio

我有一个骡子流,如

<flow name="flow1" doc:name="f1">
    <file:inbound-endpoint path="C:\input" responseTimeout="10000"
        doc:name="File" />
</flow>

<flow name="flow2" doc:name="f2">
    <http:inbound-endpoint address="http://localhost:8080"
        doc:name="HTTP" exchange-pattern="request-response" />
    <flow-ref name="flow1" doc:name="Flow Reference" />
    <file:outbound-endpoint path="C:\outputfile"
        responseTimeout="10000" doc:name="File" />
</flow>

我正在尝试使用该流程将多个文件从源移动/上传到目标(可以是任何内容,例如FTP或文件出站等...)。

这样做的原因是我想使用CURL从CLI(命令行界面)调用作业。

但它没有用......

编辑:

爵士 我的要求如下

我需要从位于硬盘中的特定文件夹中获取一些文件(多个文件)。然后将它们移动到一些可以是FTP站点或其他硬盘驱动器位置的出站进程。 但是需要从CLI调用此流程。

已编辑(基于David的回答)

我现在有了

下的流程
<flow name="filePickupFlow" doc:name="flow1" initialState="stopped">
     <file:inbound-endpoint path="C:\Input" responseTimeout="10000" doc:name="File"/>

      <logger message="#[message.payloadAs(java.lang.String)]" level="ERROR" />
</flow>

<flow name="flow2" doc:name="flow2">
  <http:inbound-endpoint address="http://localhost:8080/file-pickup/start" doc:name="HTTP" exchange-pattern="request-response"/>

  <expression-component>
        app.registry.filePickupFlow.start();
    </expression-component>

 <file:outbound-endpoint path="C:\outputfile" responseTimeout="10000" doc:name="File"/>

</flow>

我遇到了几个问题

a)我收到错误 - 属性initialState未定义为流的有效属性

enter image description here

但是,如果我删除该属性,则流程会继续,而不会等待"http://localhost:8080/file-pickup/start"启动。

b)文件不会移动到目标文件夹

那我怎么能这样做呢?

请帮忙

3 个答案:

答案 0 :(得分:4)

您无法引用其中包含入站端点的流,因为此类流已处于活动状态并且正在使用来自其入站端点的事件,因此您无法按需调用它。

以下内容在Mule 3.3.1上测试,显示了如何根据HTTP请求启动“文件拾取流”。

<flow name="filePickupFlow" initialState="stopped">
    <file:inbound-endpoint path="///tmp/mule/input" />
    <!-- Do something with the file: here we just log its content -->
    <logger message="#[message.payloadAs(java.lang.String)]" level="ERROR" />
</flow>

<flow name="filePickupStarterFlow">
    <http:inbound-endpoint address="http://localhost:8080/file-pickup/start"
        exchange-pattern="request-response" />
    <expression-component>
        app.registry.filePickupFlow.start();
    </expression-component>
    <set-payload value="File Pickup successfully started" />
</flow>

HTTP GETting http://localhost:8080/file-pickup/start然后会启动filePickupFlow/tmp/mule/input会处理file:connector中的文件。

请注意,您需要配置{{1}}它处理的文件必须具有的行为,删除它们或将它们移动到另一个目录是两个主要选项。

答案 1 :(得分:0)

我想在这种情况下,按需读取文件的文件入站将没有用处。

请尝试以下方式。

<flow name="flow1" doc:name="f2">
    <http:inbound-endpoint address="http://localhost:8080"
        doc:name="HTTP" exchange-pattern="request-response" />
    <component>
        <spring-object bean="fileLoader"></spring-object>
    </component>
   <file:outbound-endpoint path="C:\outputfile"
       responseTimeout="10000" doc:name="File" />
</flow>

因此,Custom组件将是一个从指定位置读取文件的Class。

希望这有帮助。

答案 2 :(得分:0)

您可以使用Mule Requester获得干净的解决方案。请参阅博客文章Introducing the Mule Requester中的详细信息。