On Fri, Aug 28, 2009 at 9:12 AM, shirazi<[email protected]> wrote:
>
> Thanks again for your reply,
> Well, ok as long as it is a simple logic when choosing a specific route, I
> can do that and make it work in the xml or the RouteBuilder. But what if I
> need to implement more complicated logic in a java bean?
>

<receipientList> should be able use any kind of expression to
determine the recipients.
So just use a methodCall expressions

Its something like this

<recipientList>
   <methodCall bean="myBean" method="foo"/>
</recipientList>



> Regards,
> Farhad Shirazi
>
>
> Claus Ibsen-2 wrote:
>>
>> Use the <recepientList> XML tag for that. You have mixed POJO with XML
>> routing.
>>
>>
>>
>> On Thu, Aug 27, 2009 at 11:41 AM, Farhad Dehghani<[email protected]> wrote:
>>> Hi Claus,
>>> It seems that the problem is the "VodIncomingProcessor" bean, which is a
>>> @RecipientList. Because when I remove it from the route, everything works
>>> fine (using exchange.getIn().setHeader() in the trailerHandler). A
>>> simplified version of the VodIncomingProcessor looks like:
>>>
>>> public class VodIncomingProcessor {
>>>        private final static Log log =
>>> LogFactory.getLog(VodIncomingProcessor.class);
>>>
>>>       �...@recipientlist
>>>        public List<String> next(File file) throws IOException {
>>>                List<String> recipients = new ArrayList<String>();
>>>
>>>                log.info("Invoked on file "+file.getCanonicalPath());
>>>
>>>                if(file.getName().endsWith(".mpg")){
>>>                        recipients.add("bean:trailerHandler");
>>>                }else if(file.getName().endsWith(".pgp")){
>>>                        recipients.add("bean:pgpHandler");
>>>                }else if(file.getName().endsWith(".ts")){
>>>                        recipients.add("bean:movieHandler");
>>>                }
>>>                return recipients;
>>>        }
>>> }
>>>
>>> I guess that the VodIncomingProcessor needs to somehow forward the File's
>>> inputstream to the next step in the route, but i'm not sure how.
>>>
>>> Thanks,
>>> Farhad
>>>
>>> Begin forwarded message:
>>>
>>>> Date: August 26, 2009 7:12:26 AM GMT+02:00
>>>> Subject: Re: renaming a file in a bean
>>>> Source: Nabble - Camel - Users
>>>> Author: Claus Ibsen-2
>>>>
>>>> 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<m...@...> 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
>>>> Read more…
>>>>
>>>
>>>
>>
>>
>>
>> --
>> Claus Ibsen
>> Apache Camel Committer
>>
>> Open Source Integration: http://fusesource.com
>> Blog: http://davsclaus.blogspot.com/
>> Twitter: http://twitter.com/davsclaus
>>
>>
>
> --
> View this message in context: 
> http://www.nabble.com/Fwd%3A-renaming-a-file-in-a-bean-tp25169359p25185111.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>



-- 
Claus Ibsen
Apache Camel Committer

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

Reply via email to