[ 
https://issues.apache.org/jira/browse/CAMEL-11437?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16063861#comment-16063861
 ] 

David R. Hoffman commented on CAMEL-11437:
------------------------------------------

[~onders]; [~davsclaus] - It seems to me that while this will fix the issue it 
will also cause probeContentType to get called multiple times.  It would appear 
from the new code that it would get called anytime 
GenericFileRenameProcessStrategy.begin() gets called, but also anytime 
GenericFile.bindToExchange(Exchange exchange) gets called and 
GenericFile.probeConentType == true.  If the route attributes have 
&probeContentType, &preMove and &move with this solution wouldn't 
probeContentType get called three times per file on the FileEndpoint.  Probing 
a file's content time could be fairly costly from a computational point of 
view, so I'd think you wouldn't want to do it more than absolutely necessarily 
- imho.

> 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)

Reply via email to