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 15:21:16 UTC

Rename files in a bean

Hi,
Please consider the route definitions 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 Shirazi

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: Rename files in a bean

Posted by Claus Ibsen <cl...@gmail.com>.
Looks like a double post. Answered in previous post.


On Wed, Aug 26, 2009 at 3:21 PM, Farhad Dehghani<me...@farhad.eu> wrote:
> Hi,
> Please consider the route definitions 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 Shirazi
>
> 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