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