Мул поток не вызывает - PullRequest
0 голосов
/ 29 июня 2018

Я использую Groovy внутри опроса, чтобы проверить существование файла в указанном месте. Мой поток работает нормально, когда есть файл. Но если я удалю этот файл, поток не сработает. Ниже мой код

<flow name="monitor-dst-file-flow">
    <poll doc:name="Poll">
        <schedulers:cron-scheduler expression="0 0 23 ? * TUE-SAT"/>
        <scripting:transformer doc:name="Groovy">
            <scripting:script engine="Groovy"><![CDATA[def endpointBuilder = muleContext.endpointFactory.getEndpointBuilder( 
                "sftp://${user}:${pwForGroovy}@${host}:${port}${inputpath}/?connector=SFTP")                    
                endpointBuilder.addMessageProcessor(new org.mule.routing.MessageFilter(new org.mule.transport.file.filters.FilenameWildcardFilter('test.txt'))) 

def inboundEndpoint = endpointBuilder.buildInboundEndpoint () inboundEndpoint.request (30000L)]]>

        </scripting:transformer>
    </poll>
    <choice doc:name="Choice">
        <when expression="#[message.inboundProperties.originalFilename ==&quot;test.txt&quot;]">
            <logger level="INFO" doc:name="Logger" message="File Exists..."/>
        </when>
        <otherwise>

            <logger message="FILE EXISTS" level="ERROR" doc:name="Logger"/>

            <flow-ref name="email-notification-sub-flow" doc:name="Flow Reference"/>

        </otherwise>
    </choice>
</flow>

Здесь, если нет файла test.txt, я не могу отладить компонент Choice.

Там написано - Polling of monitor-dst-file-flow returned null, the flow will not be invoked. Я не могу определить точное решение для запуска моего потока. Я должен справиться с этим условием, когда данного файла нет.

1 Ответ

0 голосов
/ 03 июля 2018

Вам нужно вернуть что-то кроме null из цели опроса для запускаемого потока. Я бы порекомендовал сделать это в подпотоке:

<flow name="monitor-dst-file-flow">
  <poll doc:name="Poll">
    <schedulers:cron-scheduler expression="0 0 23 ? * TUE-SAT"/>
    <flow-ref name="pollerProcessor" doc:name="pollerProcessor"/>
  </poll>
  <choice doc:name="Choice">
    <when expression="#[payload == 'file not found']">
      <logger level="INFO" doc:name="Logger" message="File Exists..."/>
    </when>
    <otherwise>
      <logger message="FILE EXISTS" level="ERROR" doc:name="Logger"/>
      <flow-ref name="email-notification-sub-flow" doc:name="Flow Reference"/>
    </otherwise>
  </choice>
</flow>
<sub-flow name="pollerProcessor">
  <scripting:transformer doc:name="Groovy">
    <scripting:script engine="Groovy"><![CDATA[def endpointBuilder = muleContext.endpointFactory.getEndpointBuilder( 
      "sftp://${user}:${pwForGroovy}@${host}:${port}${inputpath}/?connector=SFTP")                    
      endpointBuilder.addMessageProcessor(new org.mule.routing.MessageFilter(new org.mule.transport.file.filters.FilenameWildcardFilter('test.txt'))) 
      def inboundEndpoint = endpointBuilder.buildInboundEndpoint() inboundEndpoint.request(30000L)]]>
    </scripting:script>
  </scripting:transformer>
  <set-payload value="#[payload == null ? 'file not found' : payload]" doc:name="Set Payload"/>
</sub-flow>
...