簡體   English   中英

如何檢查Mule esb中是否存在文件

[英]How to check if file exists in Mule esb

我想使用選擇流控制,當名為#[function:dateStamp:dd-MM-yyyy] .xml的文件存在時,將選擇一個路由,當此文件不存在時,將選擇其他路由。

是否可以寫'何時'選擇部分來檢查文件是否存在?

您可以使用MEL:

<configuration>
    <expression-language>
        <import class="java.text.SimpleDateFormat" />
        <global-functions><![CDATA[
          def xmlFileExists() {
            filePath = '/tmp/' + new SimpleDateFormat('dd-MM-yyyy').format(new Date()) + '.xml';
            new File(filePath).isFile();
          }
        ]]></global-functions>
    </expression-language>
</configuration>

...

    <choice>
        <when expression="#[xmlFileExists()]">
            ...
        </when>
        <otherwise>
            ...
        </otherwise>
    </choice>

不知道那會是什么樣子但是,你總是可以用普通的Java來做。 將Java組件放在選擇前面:

<component doc:name="CheckFileExists">
        <singleton-object class="com.example.CheckFileExist">
        </singleton-object>
</component>

檢查Java代碼中的文件,並將message屬性添加到調用范圍。

然后在調用屬性上進行選擇:

<choice doc:name="Choice">
        <when expression="message.getInvocationProperty('thevariable')" evaluator="groovy">
            <processor-chain>
               ....
            </processor-chain>
        </when>
<choice>

如果要在特定時間或間隔檢查文件是否存在,可以使用quartz和請求者模塊

<flow name="filePollQuartzFlow1" doc:name="filePollQuartzFlow1">
    <quartz:inbound-endpoint jobName="job" repeatInterval="60000" startDelay="1000" responseTimeout="10000" doc:name="Quartz">
        <quartz:event-generator-job/>
    </quartz:inbound-endpoint>
    <mulerequester:request config-ref="Mule_Requester" resource="file://#[function:dateStamp:dd-MM-yyyy].xml" doc:name="Request a message from a directory"/>

    <choice doc:name="Choice">
        <when expression="#[message.payload==null]">
            <logger message="NO FILE FOUND" level="ERROR" doc:name="Log Null Payload"/>
        </when>
        <otherwise>
            <byte-array-to-string-transformer doc:name="Byte Array to String"/>
            <logger message="FILE FOUND: #[message.payload]" level="ERROR" doc:name="Log Payload"/>
        </otherwise>
    </choice>
</flow>

這就是我最終這樣做的方式:

<flow name="stateFileFlow" doc:name="stateFileFlow">
    <file:inbound-endpoint connector-ref="input" path="/path" doc:name="File">
        <file:filename-regex-filter pattern="(^ABC).xml" caseSensitive="true"/>
    </file:inbound-endpoint>
    <choice doc:name="Choice">
        <when expression="#[message.outboundProperties['filename'] == null]">
            <logger level="WARN" doc:name="Logger" message="NO FILE"/>
        </when>
         <otherwise>
             <logger level="WARN" doc:name="Logger" message="FILE EXISTS"/>
            <file:outbound-endpoint connector-ref="output" path="/path" doc:name="File"/>
         </otherwise>
    </choice>
</flow>

這又是另一個讓現在更容易使用現有消息:

<sub-flow name="stateFileFlow" doc:name="stateFileFlow">
    <message-properties-transformer scope="invocation" overwrite="true" doc:name="Message Properties">
        <add-message-property key="path" value="/path" />
        <add-message-property key="format" value="dd-MM-yyyy" />
        <add-message-property key="extension" value="flag" />
    </message-properties-transformer>

    <scripting:component doc:name="asdf">
       <scripting:script engine="groovy">
         <scripting:text>
            def format = message.getInvocationProperty('format');
            def path = message.getInvocationProperty('path');
            def fileName = new Date().format(format) + "." + message.getInvocationProperty('extension');
            def filePath = path + File.separator + fileName;
            def exists = new File(filePath).isFile();
            message.setProperty('exists',exists, org.mule.api.transport.PropertyScope.OUTBOUND);
            message.setProperty('filename',fileName, org.mule.api.transport.PropertyScope.OUTBOUND);
            return message.payload;
        </scripting:text>
       </scripting:script>
    </scripting:component>

    <choice doc:name="Choice">
        <when expression="#[message.outboundProperties['exists'].toString() == 'true']">
            <logger level="INFO" doc:name="Logger" message="FILE EXISTS"/>
        </when>
         <otherwise>
            <logger level="INFO" doc:name="Logger" message="CREATING FILE #[message]"/>
            <file:outbound-endpoint connector-ref="output" path="/path" doc:name="File"/>
         </otherwise>
    </choice>

</sub-flow>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM