Domanda

Sto usando l'integrazione a molla per poll a una directory per un file, elabora questo file in una classe di servizio, scrivi questo file in una directory di uscita e quindi eliminare il file originale.

Ho la seguente configurazione 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"/>
.

Questo sondaggi Il file, lo passa al mio trattamento Elaboration_service e lo copia nella directory in uscita.Tuttavia il file originale non viene eliminato.Qualcuno ha idea del perché no?

È stato utile?

Soluzione

So che la domanda è stata posta molto tempo fa, ma forse la risposta sarà utile per qualcun altro.

Il motivo per cui il file di input non viene eliminato è fornito nel Riferimento di integrazione della molla :

.

L'attributo delete-source-files avrà un effetto solo se il Il messaggio in entrata ha un file payload del file o se il FileHeaders.ORIGINAL_FILE Il valore di intestazione contiene l'istanza del file di origine o una stringa Rappresentando il percorso del file originale.

Il tuo messaggio non contiene questa particolare intestazione. Se si utilizza uno dei file standard Trasformatori (FileToStringTransformer e FileToByteArrayTransformer) Sarà impostato automaticamente. In alternativa puoi impostarlo manualmente utilizzando un Intestazione Enricher .

Dietro le quinte qualcosa come questo sta accadendo nei trasformatori di file:

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

Altri suggerimenti

Dalla documentazione http://static.springsource.org/spring-integrazione / riferimento / html / file.html

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

Non so come farlo sull'adattatore a canale in entrata (che penso abbia senso)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top