Перемещение файлов на основе контента с помощью Mule - PullRequest
2 голосов
/ 28 ноября 2011

Мой конфигурационный файл mule содержит следующий поток:

<flow name="HTTP input1">
  <ftp:inbound-endpoint user="username" password="secret" host="host" path="location" port="21">
    <file:filename-wildcard-filter pattern="." />
  </ftp:inbound-endpoint>
  <file:outbound-endpoint path="E:/Mule/Inbound" outputPattern="#[header:originalFilename]" >
  </file:outbound-endpoint>
</flow>

Я могу переместить файлы, но мне нужно прочитать содержимое файла и, основываясь на этом содержимом, поместить его в определенный каталог.

Например, если содержимое моего файла имеет «Vendor1», тогда он должен поместить файл под Vendor1. К вашему сведению: Vendor1 не является статичным. Это может Vendor1000. Есть идеи по этому поводу?

1 Ответ

1 голос
/ 28 ноября 2011

То, что вы хотите сделать, это:

  • Извлечение нужного значения из файла с помощью преобразователя (не выражение, потому что никто не поддерживает ваш конкретный формат файла),
  • Используйте этосвойство в атрибуте пути исходящей конечной точки.

Что-то вроде:

<flow name="HTTP input1">
  <ftp:inbound-endpoint user="username"
                        password="secret"
                        host="host"
                        path="location"
                        port="21">
    <file:filename-wildcard-filter pattern="." />
  </ftp:inbound-endpoint>
  <script:transformer name="stringReplaceWithParams">
    <script:script engine="groovy">
        <script:text>
          // here the payload variable should contain a byte[] from the remote FTP file
          // ... munch-munch the byte[] with Groovy to find the value to put in targetSubDir
          var targetSubDir = ...

          message.setOuboundProperty('targetSubDir', targetSubDir) 
          // return the payload unchanged, we just changed a message property
          return payload 
        </script:text>
    </script:script>
  </script:transformer>
  <file:outbound-endpoint path="E:/Mule/Inbound/#[header:targetSubDir]"
                          outputPattern="#[header:originalFilename]" />
</flow>
...