Pregunta

Estoy usando la Primavera de Integración para sondear un directorio de un Archivo, proceso este archivo en un servicio de clase, escribir en este archivo a un directorio de salida y, a continuación, elimine el archivo original.

Tengo el siguiente código XML de configuración:

  <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"/>

Este urnas el archivo, se lo pasa a mi processing_service y la copia en el directorio de salida.Sin embargo, el archivo original no se elimina.¿Alguien tiene alguna idea de por qué no?

¿Fue útil?

Solución

Sé que la pregunta fue hecha hace mucho tiempo, pero tal vez la respuesta va a ser útil para alguien más.

La razón por la que el archivo de entrada no se elimina se proporciona en el La Primavera De Integración De Referencia:

El delete-source-files atributo sólo tendrá efecto si el el Mensaje tiene un Archivo de carga o si el FileHeaders.ORIGINAL_FILE el valor de encabezado contiene el Archivo de origen de ejemplo o una Cadena representa la ruta del archivo original.

Su mensaje no contiene este particular encabezado.Si utiliza uno de los archivo estándar de los transformadores de (FileToStringTransformer y FileToByteArrayTransformer) se configurará automáticamente.Alternativamente, usted puede configurar de forma manual utilizando un encabezado enricher.

Detrás de las escenas algo como esto que está sucediendo en el archivo de transformers:

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

Otros consejos

de la documentación http://static.springsource.org/spring-integración / referencia / html / archivos.html

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

No sé cómo hacerlo en el adaptador de canal de entrada (que creo que tiene sentido)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top