[
https://issues.apache.org/jira/browse/CAMEL-11437?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
onder sezgin reassigned CAMEL-11437:
------------------------------------
Assignee: onder sezgin
> Bug using file endpoint probeContentType and preMove attributes together
> causes Exchange.FILE_CONTENT_TYPE to get dropped. (2.19.0)
> ------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-11437
> URL: https://issues.apache.org/jira/browse/CAMEL-11437
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Affects Versions: 2.19.0
> Reporter: David R. Hoffman
> Assignee: onder sezgin
> Priority: Minor
> Fix For: 2.19.2, 2.20.0
>
>
> We have a route:
> {quote}
> from("file:inbox?probeContentType=true&preMove=inprogress/$\{file:name}&renameUsingCopy=true")
> .transacted()
> .bean(MimeTypeParser.class, "populateFileTypeHeaderFields")
> .to("seda:somewhere")
> {quote}
>
> 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():
> {quote}
> .process(exchange -> \{
> Path path = exchange.getIn().getBody(File.class).toPath();
> exchange.getIn().setHeader(Exchange.FILE_CONTENT_TYPE,
> Files.probeContentType(path));
> })
> {quote}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)