Весенняя интеграция, удалить файл в исходящем адаптере канала

StackOverflow https://stackoverflow.com//questions/12707149

Вопрос

Я использую Spring Integration, чтобы опросить каталог для файла, обрабатывать этот файл в классе обслуживания, напишите этот файл в каталог выходных данных, а затем удалите исходный файл.

У меня есть следующая конфигурация XML:

  <int-file:inbound-channel-adapter id="filesInChannel"
                                    directory="file:${java.io.tmpdir}/input" 
                                    auto-create-directory="true"  >
      <int:poller id="poller" fixed-delay="1000" />
  </int-file:inbound-channel-adapter>

  <int:service-activator id="servicActivator"
                         input-channel="filesInChannel"
                         output-channel="filesOut"
                         ref="my_file_processing_service">
  </int:service-activator>

  <int-file:outbound-channel-adapter  id="filesOut" auto-create-directory="true" delete-source-files="true" directory="file:${java.io.tmpdir}/output"/>
.

Это опросы файла, передает его на мою обработку_сервис и копирует его в исходящий каталог.Однако исходный файл не удаляется.У кого-нибудь есть идея о том, почему нет?

Это было полезно?

Решение

Я знаю, что вопрос был задан давным-давно, но, возможно, ответ будет полезен для кого-то другого.

Причина, по которой входной файл не удален, предоставляется в Справка пружины интеграции :

Атрибут delete-source-files будет иметь только эффект, если Входящее сообщение имеет полезную нагрузку или если FileHeaders.ORIGINAL_FILE Значение заголовка содержит либо экземпляр исходного файла или строку Представление исходного пути файла.

Ваше сообщение не содержит этого конкретного заголовка. Если вы используете один из одной из Стандартный файл Трансформаторы (FileToStringTransformer и FileToByteArrayTransformer) он будет установлен автоматически. В качестве альтернативы вы можете установить его вручную, используя Заголовок ряд .

за кулисами что-то вроде этого происходит в файловых трансформаторах:

...
Message<?> transformedMessage = MessageBuilder.withPayload(result)
        .copyHeaders(message.getHeaders())
        .setHeaderIfAbsent(FileHeaders.ORIGINAL_FILE, file)
        .setHeaderIfAbsent(FileHeaders.FILENAME, file.getName())
        .build();
...
.

Другие советы

из документации http://static.springsource.org/spring-интеграция / ссылка / HTML / FileS.html

<int-file:outbound-gateway id="mover" request-channel="moveInput"
reply-channel="output"
directory="${output.directory}"
mode="REPLACE" delete-source-files="true"/>
.

Я не знаю, как это сделать на входящем канале-адаптере (который, я думаю, имеет смысл)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top