Шлюз Spring-Integeration SFTP для работы с Mput

Я пытаюсь загрузить несколько файлов, используя исходящий шлюз SFTP. Мой код Java выглядит так:

final DirectChannel reqWriteChannel = (DirectChannel) context.getBean("toWriteChannel");
final PollableChannel repWriteChannel = (PollableChannel) context.getBean("fromWriteChannel");

reqWriteChannel.send(MessageBuilder.withPayload(listOfFiles).build());
Message<?> input = repReadChannel.receive(1000);

System.out.println(input);
System.out.println(input.getPayload().toString());

А это конфигурация XML:

<int:channel id="fromWriteChannel"><int:queue /></int:channel>
<int:channel id="toWriteChannel" />

<int-sftp:outbound-gateway
      id="sftpWriteOnly"
      session-factory="sftpSessionFactory"
      request-channel="toWriteChannel"
      reply-channel="fromWriteChannel"
      command="mput"
      expression="payload"
      remote-directory="/test/mytest/"
      remote-file-separator="X"
      auto-create-directory="true"
      order="1" mput-regex=".*">
</int-sftp:outbound-gateway>

<int:poller default="true" fixed-delay="500"/>

Когда я передаю один файл, приведенный выше код работает, но когда я передаю список файлов, я получаю следующее исключение:

Caused by: java.lang.IllegalArgumentException: Only File or String payloads allowed for 'mput'
at org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.doMput(AbstractRemoteFileOutboundGateway.java:816)
at org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.handleRequestMessage(AbstractRemoteFileOutboundGateway.java:598)
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:158)
... 7 more

Есть идеи, как это исправить и загрузить несколько файлов? Пожалуйста, поделитесь любым полным примером. Спасибо




Ответы (1)


MPUT отправляет все файлы в каталоге; не список File.

Из документации...

mput отправляет несколько файлов на сервер и поддерживает следующую опцию:

-R - Recursive - отправить все файлы (возможно, отфильтрованные) в каталоге и подкаталогах

Полезная нагрузка сообщения должна быть файлом java.io.File, представляющим локальный каталог.

...

(мой акцент, это также может быть строка, ссылающаяся на каталог).

Если вы не хотите отправлять все файлы, вы можете добавить фильтр.

Не стесняйтесь открывать «Улучшение» JIRA Issue, и мы можем добавить поддержку коллекции File .

person Gary Russell    schedule 23.10.2018
comment
Мы можем добавить поддержку коллекции File — смело открывайте задачу JIRA. - person Gary Russell; 23.10.2018