Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-11437

Bug using file endpoint probeContentType and preMove attributes together causes Exchange.FILE_CONTENT_TYPE to get dropped. (2.19.0)

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 2.19.0
    • 2.19.2, 2.20.0
    • camel-core
    • None

    Description

      We have a route:

      from("file:inbox?probeContentType=true&preMove=inprogress/${file:name}&renameUsingCopy=true")
      .transacted()
      .bean(MimeTypeParser.class, "populateFileTypeHeaderFields")
      .to("seda:somewhere")

      The probeContentType executes before preMove & renameUsingCopy and correctly sets the Exchange.FILE_CONTENT_TYPE header.

      The problem happens during the preMove & renameUsingCopy part where GenericFileExpressionRenamer calls the GenericFile method GenericFile<T> copyFrom(GenericFile<T> source).

      This "copy constructor" method does not copy the header Exchange.FILE_CONTENT_TYPE, nor does it preserve the value of the GenericFile probeContentType field.

      The class GenericFileRenameProcessStrategy calls GenericFileExpressionRenamer from the method begin() which in turn calls GenericFile.bindToExchange(Exchange exchange).

      GenericFile.bindToExchange() clears all "CamelFile*" headers and then calls GenericFile.populateHeaders(GenericFileMessage<T> message) which would call Files.probeContentType(Path path) if the GenericFile probeContentType field weren't now false.

      When our route gets to the MimeTypeParser bean the "CamelFileContentType" header is lost, and that is what we are looking for.

      One work-around is to put something like this between .transacted() and the .bean():

      .process(exchange -> {
      Path path = exchange.getIn().getBody(File.class).toPath();
      exchange.getIn().setHeader(Exchange.FILE_CONTENT_TYPE, Files.probeContentType(path));
      })

      Attachments

        Issue Links

          Activity

            People

              onders Onder Sezgin
              dr_hoffman David R. Hoffman
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: