[ 
https://issues.apache.org/jira/browse/CAMEL-11437?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

David R. Hoffman updated CAMEL-11437:
-------------------------------------
    Estimated Complexity: Advanced  (was: Unknown)

> 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
>    Affects Versions: 2.19.0
>            Reporter: David R. Hoffman
>
> 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)

Reply via email to