You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Farhad Dehghani <me...@farhad.eu> on 2009/08/26 14:02:52 UTC

renaming a file in a bean

Hi,
Please consider the route definition below:
--------
<camel:camelContext id="vod_workflow">
	<camel:package>com.nordija.itv.vod.workflow</camel:package>
   <camel:route>
     <camel:from uri="file:///tmp/vodwof?recursive=true" />
	<camel:to uri="file:///tmp/vodIncoming?tempPrefix=.inprogress_" />
	<camel:to uri="bean:vodIncomingProcessor"/>
	<camel:to uri="direct:route_1"/>
   </camel:route>
   <camel:route>
	<camel:from uri="direct:route_1"/>			
	<camel:to uri="bean:trailerHandler"/>
	<camel:to uri="file:///tmp/trailer?tempPrefix=.inprogress_"/>
	<camel:to uri="direct:end"/>
   </camel:route>
   ....
</camel:camelContext>
<bean name="trailerHandler"  
class="com.nordija.itv.vod.workflow.TarilerHandlerImpl" />
---------
The vodIncomingProcessor is a @RecipientList annotated bean that  
decides if the file in question should be handled by the  
"trailerHandler" or something else.
The trailerHandler needs among other things to rename the resulting  
file. The following code is a very simplified version of the bean:

@Service(value="trailerHandler")
public class TarilerHandlerImpl implements TrailerHandler {
	public void handleTrailer(Exchange exchange) {
		if(exchange != null){		
			String fileName =  
(String)exchange.getIn().getHeader(Exchange.FILE_NAME);
			if(fileName != null){
				exchange.getOut().setHeader(Exchange.FILE_NAME, rename(fileName));
			}
		}
	}
}

The "rename(String filename)" method renames the file and it's  
implementation is not relevant here. For test, it just prefix the  
filename with "trailer_".
When I run the application, the following exception is thrown, and the  
trailerHandler gets called again and again.

I appreciate any help,
-Farhad Dehghani

13:02:20,913 INFO  [STDOUT] 13:02:20,911 ERROR  
[GenericFileOnCompletion] Cannot store file: /tmp/ 
trailer/.inprogress_trailer_test.mpg
org.apache.camel.component.file.GenericFileOperationFailedException:  
Cannot store file: /tmp/trailer/.inprogress_trailer_test.mpg
	at  
org 
.apache 
.camel.component.file.FileOperations.storeFile(FileOperations.java:203)
	at  
org 
.apache 
.camel 
.component.file.GenericFileProducer.writeFile(GenericFileProducer.java: 
144)
	at  
org 
.apache 
.camel 
.component 
.file.GenericFileProducer.processExchange(GenericFileProducer.java:86)
	at  
org 
.apache 
.camel 
.component.file.GenericFileProducer.process(GenericFileProducer.java:57)
	at org.apache.camel.processor.SendProcessor 
$1.doInProducer(SendProcessor.java:81)
	at org.apache.camel.processor.SendProcessor 
$1.doInProducer(SendProcessor.java:79)
	at  
org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:141)
	at  
org.apache.camel.processor.SendProcessor.process(SendProcessor.java:78)
	at  
org 
.apache 
.camel 
.management 
.InstrumentationProcessor.process(InstrumentationProcessor.java:61)
	at  
org 
.apache 
.camel 
.processor 
.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:186)
	at  
org 
.apache 
.camel 
.processor 
.RedeliveryErrorHandler 
.processErrorHandler(RedeliveryErrorHandler.java:155)
	at  
org 
.apache 
.camel 
.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java: 
88)
	at  
org 
.apache 
.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java: 
49)
	at  
org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java: 
148)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:74)
	at  
org 
.apache 
.camel 
.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:70)
	at  
org 
.apache 
.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48)
	at  
org 
.apache 
.camel.component.direct.DirectProducer.process(DirectProducer.java:45)
	at org.apache.camel.processor.SendProcessor 
$1.doInProducer(SendProcessor.java:81)
	at org.apache.camel.processor.SendProcessor 
$1.doInProducer(SendProcessor.java:79)
	at  
org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:141)
	at  
org.apache.camel.processor.SendProcessor.process(SendProcessor.java:78)
	at  
org 
.apache 
.camel 
.management 
.InstrumentationProcessor.process(InstrumentationProcessor.java:61)
	at  
org 
.apache 
.camel 
.processor 
.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:186)
	at  
org 
.apache 
.camel 
.processor 
.RedeliveryErrorHandler 
.processErrorHandler(RedeliveryErrorHandler.java:155)
	at  
org 
.apache 
.camel 
.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java: 
88)
	at  
org 
.apache 
.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java: 
49)
	at  
org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java: 
148)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:74)
	at  
org 
.apache 
.camel 
.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:54)
	at  
org 
.apache 
.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48)
	at  
org 
.apache 
.camel 
.component 
.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:198)
	at  
org 
.apache 
.camel 
.component 
.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:120)
	at  
org 
.apache 
.camel 
.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:93)
	at  
org 
.apache 
.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:99)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java: 
417)
	at java.util.concurrent.FutureTask 
$Sync.innerRunAndReset(FutureTask.java:280)
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:135)
	at java.util.concurrent.ScheduledThreadPoolExecutor 
$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:65)
	at java.util.concurrent.ScheduledThreadPoolExecutor 
$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:142)
	at java.util.concurrent.ScheduledThreadPoolExecutor 
$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:166)
	at java.util.concurrent.ThreadPoolExecutor 
$Worker.runTask(ThreadPoolExecutor.java:650)
	at java.util.concurrent.ThreadPoolExecutor 
$Worker.run(ThreadPoolExecutor.java:675)
	at java.lang.Thread.run(Thread.java:613)
Caused by: org.apache.camel.InvalidPayloadException: No body available  
of type: java.io.InputStream but has value: [bean:trailerHandler] of  
type: java.util.ArrayList on: Message: [bean:trailerHandler]. Caused  
by: No type converter available to convert from type:  
java.util.ArrayList to the required type: java.io.InputStream with  
value [bean:trailerHandler] on the exchange: Exchange[Message:  
[bean:trailerHandler]]
	at  
org 
.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java: 
104)
	at  
org 
.apache 
.camel.util.ExchangeHelper.getMandatoryInBody(ExchangeHelper.java:136)
	at  
org 
.apache 
.camel.component.file.FileOperations.storeFile(FileOperations.java:197)
	... 43 more
Caused by: org.apache.camel.NoTypeConversionAvailableException: No  
type converter available to convert from type: java.util.ArrayList to  
the required type: java.io.InputStream with value [bean:trailerHandler]
	at  
org 
.apache 
.camel 
.impl 
.converter 
.DefaultTypeConverter.mandatoryConvertTo(DefaultTypeConverter.java:119)
	at  
org 
.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java: 
102)
	... 45 more


Re: renaming a file in a bean

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

You want to replace the existing header so use IN
  exchange.getOut().setHeader(Exchange.FILE_NAME, rename(fileName));

Should be:
  exchange.getIn().setHeader(Exchange.FILE_NAME, rename(fileName));


On Wed, Aug 26, 2009 at 2:02 PM, Farhad Dehghani<me...@farhad.eu> wrote:
> Hi,
> Please consider the route definition below:
> --------
> <camel:camelContext id="vod_workflow">
>        <camel:package>com.nordija.itv.vod.workflow</camel:package>
>  <camel:route>
>    <camel:from uri="file:///tmp/vodwof?recursive=true" />
>        <camel:to uri="file:///tmp/vodIncoming?tempPrefix=.inprogress_" />
>        <camel:to uri="bean:vodIncomingProcessor"/>
>        <camel:to uri="direct:route_1"/>
>  </camel:route>
>  <camel:route>
>        <camel:from uri="direct:route_1"/>
>        <camel:to uri="bean:trailerHandler"/>
>        <camel:to uri="file:///tmp/trailer?tempPrefix=.inprogress_"/>
>        <camel:to uri="direct:end"/>
>  </camel:route>
>  ....
> </camel:camelContext>
> <bean name="trailerHandler"
> class="com.nordija.itv.vod.workflow.TarilerHandlerImpl" />
> ---------
> The vodIncomingProcessor is a @RecipientList annotated bean that decides if
> the file in question should be handled by the "trailerHandler" or something
> else.
> The trailerHandler needs among other things to rename the resulting file.
> The following code is a very simplified version of the bean:
>
> @Service(value="trailerHandler")
> public class TarilerHandlerImpl implements TrailerHandler {
>        public void handleTrailer(Exchange exchange) {
>                if(exchange != null){
>                        String fileName =
> (String)exchange.getIn().getHeader(Exchange.FILE_NAME);
>                        if(fileName != null){
>
>  exchange.getOut().setHeader(Exchange.FILE_NAME, rename(fileName));
>                        }
>                }
>        }
> }
>
> The "rename(String filename)" method renames the file and it's
> implementation is not relevant here. For test, it just prefix the filename
> with "trailer_".
> When I run the application, the following exception is thrown, and the
> trailerHandler gets called again and again.
>
> I appreciate any help,
> -Farhad Dehghani
>
> 13:02:20,913 INFO  [STDOUT] 13:02:20,911 ERROR [GenericFileOnCompletion]
> Cannot store file: /tmp/trailer/.inprogress_trailer_test.mpg
> org.apache.camel.component.file.GenericFileOperationFailedException: Cannot
> store file: /tmp/trailer/.inprogress_trailer_test.mpg
>        at
> org.apache.camel.component.file.FileOperations.storeFile(FileOperations.java:203)
>        at
> org.apache.camel.component.file.GenericFileProducer.writeFile(GenericFileProducer.java:144)
>        at
> org.apache.camel.component.file.GenericFileProducer.processExchange(GenericFileProducer.java:86)
>        at
> org.apache.camel.component.file.GenericFileProducer.process(GenericFileProducer.java:57)
>        at
> org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:81)
>        at
> org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:79)
>        at
> org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:141)
>        at
> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:78)
>        at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:61)
>        at
> org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:186)
>        at
> org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:155)
>        at
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88)
>        at
> org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49)
>        at
> org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:148)
>        at org.apache.camel.processor.Pipeline.process(Pipeline.java:74)
>        at
> org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:70)
>        at
> org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48)
>        at
> org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:45)
>        at
> org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:81)
>        at
> org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:79)
>        at
> org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:141)
>        at
> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:78)
>        at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:61)
>        at
> org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:186)
>        at
> org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:155)
>        at
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88)
>        at
> org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49)
>        at
> org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:148)
>        at org.apache.camel.processor.Pipeline.process(Pipeline.java:74)
>        at
> org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:54)
>        at
> org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48)
>        at
> org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:198)
>        at
> org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:120)
>        at
> org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:93)
>        at
> org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:99)
>        at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417)
>        at
> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:280)
>        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:135)
>        at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:65)
>        at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:142)
>        at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:166)
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>        at java.lang.Thread.run(Thread.java:613)
> Caused by: org.apache.camel.InvalidPayloadException: No body available of
> type: java.io.InputStream but has value: [bean:trailerHandler] of type:
> java.util.ArrayList on: Message: [bean:trailerHandler]. Caused by: No type
> converter available to convert from type: java.util.ArrayList to the
> required type: java.io.InputStream with value [bean:trailerHandler] on the
> exchange: Exchange[Message: [bean:trailerHandler]]
>        at
> org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:104)
>        at
> org.apache.camel.util.ExchangeHelper.getMandatoryInBody(ExchangeHelper.java:136)
>        at
> org.apache.camel.component.file.FileOperations.storeFile(FileOperations.java:197)
>        ... 43 more
> Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
> converter available to convert from type: java.util.ArrayList to the
> required type: java.io.InputStream with value [bean:trailerHandler]
>        at
> org.apache.camel.impl.converter.DefaultTypeConverter.mandatoryConvertTo(DefaultTypeConverter.java:119)
>        at
> org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:102)
>        ... 45 more
>
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus