Hi, Got a bit stuck. I don't want to handle theh writing to file if Camel can do it, I found a example under FTP1 that was close to wha tI wanted. The other thong is you said a file at a time, what if my URL contains a filename pattern and there will be hundreds of files. What I want it to be blocked until they are all downloaded, then return.
With this route builder approach it is not clear what that initial 'to' specification needs to be? Also once you have the context loaded without a route Id how do I get it to start? This is the approach, those few question need to be answered before I can complete this code. try { String to = localName.length()>0?localName:""; RouteBuilder builder = new RouteBuilder() { public void configure() { from("seda:start").process(new Processor() { public void process(final Exchange exchange) throws Exception { CamelContext camelContext = Activator.dcc; String sourcePath = createFromUri(); if(sourcePath == null) return; Endpoint ftp = camelContext.getEndpoint(sourcePath); PollingConsumer consumer = ftp.createPollingConsumer(); consumer.start(); // receive the remote ftp without timeout Exchange result = consumer.receive(); // we must stop the consumer consumer.stop(); // the result is the response from the FTP consumer (the downloaded file) // replace the outer exchange with the content from the downloaded file exchange.getIn().setBody(result.getIn().getBody()); } }).to(localPath+"?fileExist=Override"); } }; CamelContext camelContext = Activator.dcc; builder.addRoutesToCamelContext(camelContext); not sure how I then start the route afteraddRoutesToCamelContext, every pafge I found that had this was an API page. Thx. David ________________________________ From: Claus Ibsen <claus.ib...@gmail.com> To: users@camel.apache.org Sent: Wednesday, 4 January 2012, 7:53 Subject: Re: NPE for FTP endpoint On Tue, Jan 3, 2012 at 5:51 PM, David Wynter <david_wyn...@yahoo.com> wrote: > Hi, > > Don't know how I missed that search box, a dooh moment. Thx. > > Reading > this http://camel.apache.org/using-getin-or-getout-methods-on-exchange.html and > several other example it looks like Exchange is designed for Message > exchange. How this relates to 1 or more fat files being fetched is not at all > clear. Is the body of the message the a handle for all files in the list that > match the filename pattern? I.e is there somewhere that explains how a > Exchange is used when the from Endpoint is NOT a message of some type? Do I > need to write a Processor for the Exchagne that grabs the list of files from > theh Message and manages the writing of those file to disk? > The Polling Consumer will poll 1 file at a time. This is how the EIP and API is designed. You can use the fileName option in the endpoint uri, to tell Camel which file to poll. Instead of working with the Exchange you can tell Camel to return the file as a InputStream etc. InputStream is = consumer.receiveBodyNoWait("ftp:xxxx", InputStream.class); // is contains a stream of the content of the ftp file. > David > > ________________________________ > From: Claus Ibsen <claus.ib...@gmail.com> > To: users@camel.apache.org > Sent: Tuesday, 3 January 2012, 16:38 > Subject: Re: NPE for FTP endpoint > > Hi > > There is a search box on the Camel front page > http://camel.apache.org/ > > Just enter some key words in the search box and check the hits. > > > Exchange exchange = > consumerTemplate.receiveNoWait("ftp:someserver?username=foo&password=secret&fileName=mycoolfile.txt"); > > if (exchange != null) { > ... > } > > Check out appendix C in the Camel in Action book as well. > > > > On Tue, Jan 3, 2012 at 5:33 PM, David Wynter <david_wyn...@yahoo.com> wrote: >> Hi, >> >> That is simpler. But not clear, after digging around in the documentation ( >> there is a lot of it and it really needs a search function) how I get an >> Exchange to route to a endpoint for the file that is being downloaded. Based >> on this statement "The Exchange is then sent down the Route for processing >> along a Processor chain." from >> here http://camel.apache.org/maven/current/camel-core/apidocs/index.html I >> still need that Route. I do not see a "setOutEndpoint" where I could have >> added my file:/ destination. In fact the only thing I can see is the >> setOutMessage, but it is not clear how I attach a Endpoint to that? >> >> Thx. >> >> David >> >> >> ________________________________ >> From: Claus Ibsen <claus.ib...@gmail.com> >> To: users@camel.apache.org; David Wynter <david_wyn...@yahoo.com> >> Sent: Tuesday, 3 January 2012, 16:04 >> Subject: Re: NPE for FTP endpoint >> >> Hi >> >> Take a look at the polling consumer EIP pattern >> http://camel.apache.org/polling-consumer.html >> >> It allows you to poll messages on-demand from any Camel endpoint. >> >> And you can use the ConsumerTemplate API to do it from a few lines of code. >> >> Then you do not need any Camel routing, etc. >> >> >> >> On Tue, Jan 3, 2012 at 3:48 PM, David Wynter <david_wyn...@yahoo.com> wrote: >>> Hi, >>> >>> I implemented my HaltProcessor. But it still does not behave as I thought. >>> I could not see where in the documentation it explains the route behaviour >>> for shutdown. I have this: >>> >>> String sourcePath = createFromUri(); >>> if(sourcePath == null) >>> return; >>> String to = localName.length()>0?localName:""; >>> RouteDefinition routeD = new RouteDefinition(); >>> routeD.from(sourcePath); >>> >>> routeD.to(localPath+"?fileExist=Override"); >>> HaltProcessor pHalt = new HaltProcessor(); >>> pHalt.setContext(camelContext); >>> routeD.routeId(sourcePath); >>> pHalt.setRouteId(sourcePath); >>> routeD.process(pHalt); >>> camelContext.addRouteDefinition(routeD); >>> >>> camelContext.startRoute(routeD); >>> >>> where Halt Processor has this process method body: >>> >>> if(context!=null && routeId != null) { >>> // remove myself from the in flight registry so we can stop this >>> route without trouble >>> context.getInflightRepository().remove(exchange); >>> // stop this route >>> context.stopRoute(routeId); >>> >>> My problem is this. The startRoute occurs and starts the route then >>> immediately hits the HaltProcessor. It hits the HaltProcessor before >>> completing the ftp download, which might be a 2KB file or a hundred 1MB >>> files. Then it all exits and my next task in a workflow executes. It >>> depends on the file being completely downloaded from the download the route >>> provides. But it seems the calling thread is terminated but some other >>> thread continues the task of doing the download, this isn't completed by >>> the time the route returns. >>> >>> My requirement is simple, download the file from ftp, do not return until >>> this is done, do it once only, do not poll, just return at this point. Do I >>> need my own ShutdownStrategy for this simple requirement, if so, is there a >>> listener I can setup to know the file has completed the download? >>> >>> A separate problem is even using noop=true it still polls. >>> >>> Thx. >>> >>> David >>> >>> >>> >>> ________________________________ >>> From: Taariq Levack <taar...@gmail.com> >>> To: "users@camel.apache.org" <users@camel.apache.org> >>> Sent: Thursday, 29 December 2011, 19:35 >>> Subject: Re: NPE for FTP endpoint >>> >>> The processor[1] is exactly that class so give it a try, also see the file >>> language [2] for dynamically setting filename. >>> >>> [1] http://camel.apache.org/processor.html >>> [2] http://camel.apache.org/file-language.html >>> >>> On 29 Dec 2011, at 9:14 PM, David Wynter <david_wyn...@yahoo.com> wrote: >>> >>>> Hi, >>>> >>>> Yes it is a dynamic path for producer and consumer. Restricted in this >>>> case as ftp to file or in another case from file to ftp. This use case is >>>> very restricted, my intent is to use Camel in a less restricted way in >>>> another use case from within this same application later, otherwise I >>>> would have just used FTPClient >>>> >>>> So you are saying I just need a class in the route that has access to the >>>> exchange to be able to stop it. I'll have a dig around in the JavaDoc to >>>> see what I can find. Are there more examples somewhere of how to use the >>>> API? >>>> >>>> Thx. >>>> >>>> >>>> ________________________________ >>>> From: Taariq Levack <taar...@gmail.com> >>>> To: "users@camel.apache.org" <users@camel.apache.org> >>>> Sent: Thursday, 29 December 2011, 18:56 >>>> Subject: Re: NPE for FTP endpoint >>>> >>>> Why do you want to create a processor definition that way? >>>> The example only uses the processor to illustrate the point, it has access >>>> to the exchange and can easily remove it from the inflight repo of the >>>> camel context. >>>> To do it your way I don't know without an IDE handy, I avoid working with >>>> low level camel API in my apps, so maybe first try to avoid it in this >>>> case or help me understand why you need it. >>>> >>>> Maybe you're only doing this to set a dynamic path for the consumer and >>>> producer? >>>> >>>> Taariq >>>> >>>> On 29 Dec 2011, at 8:26 PM, David Wynter <david_wyn...@yahoo.com> wrote: >>>> >>>>> Ok, I misunderstood the "Stopping a route during routing an existing >>>>> message is a bit tricky. The reason for that is Camel will Graceful >>>>> Shutdown the route you are stopping. And if you do that while a message >>>>> is being routed the Graceful Shutdown will try to wait until that message >>>>> has been processed." Which made me think the Processor method described >>>>> an alternate way and therefore would stop the route during the message >>>>> transfer. In fact you are saying it is an equivalent operation, I think. >>>>> >>>>> Since I am doing this in code I am not sure which of the many impl of >>>>> ProcessDefinition I should be adding to a RouteContext and then adding to >>>>> the Route. >>>>> >>>>> Is it like this? >>>>> >>>>> RouteDefinition routeD = new RouteDefinition(); >>>>> routeD.from(sourcePath); >>>>> >>>>> routeD.to(localPath+"?fileExist=Override"); >>>>> RouteContext rContext = new DefaultRouteContext(camelContext); >>>>> ProcessorDefinition pDefn = ? >>>>> rContext.createProcessor(pDefn); >>>>> routeD.createProcessor(rContext); >>>>> routeDefn.put(sourcePath+localPath+"?fileExist=Override", >>>>>routeD); >>>>> camelContext.addRouteDefinition(routeD); >>>>> camelContext.startRoute(routeD); >>>>> >>>>> Not sure which ProcessorDefinition type I need. >>>>> >>>>> Thx. >>>>> >>>>> David >>>>> >>>>> ________________________________ >>>>> From: Taariq Levack <taar...@gmail.com> >>>>> To: "users@camel.apache.org" <users@camel.apache.org> >>>>> Sent: Thursday, 29 December 2011, 17:50 >>>>> Subject: Re: NPE for FTP endpoint >>>>> >>>>> Hmmm, can you talk more about your use case? >>>>> Because the FAQ seems a perfect fit, you consume the file and then stop >>>>> the route, later it starts again in whatever way you want. >>>>> >>>>> No idea on the NPE, sorry. >>>>> >>>>> Taariq >>>>> >>>>> On 29 Dec 2011, at 7:29 PM, David Wynter <david_wyn...@yahoo.com> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> I do not want to stop the route mid flight as that FAQ seems to be >>>>>> suggesting. I would be happy to use DefaultShutdownStrategy, if it >>>>>> worked. My problem is that it is inconsistent, which seems bad design, >>>>>> on a slow machine the route is not considered started by the time I hit >>>>>> the stopRoute, whereas on a fast machine it is considered started. I >>>>>> even used Thread delays but that did not give consistent results either. >>>>>> Thus I decided to leave the route running, but that polls the server, a >>>>>> no no with this service provider. There does not seem a way to just do >>>>>> it once and then be certain the fetch has occurred before stopping the >>>>>> route to prevent the polling. I'd like to poll until my fetch from the >>>>>> ftp server is complete, and then stop polling and stop the route, I'll >>>>>> start it again when I am ready. There does not seem to be a way of >>>>>> adding a listener to the route to ask it, "hey have you actually >>>>>> completed the route for the file specified?" The only > way >>> I >>>>>> can think of doing this is adding a custom endpoint as a next step, this >>>>>> custom endpoint then calls for the route to be stopped. >>>>>> >>>>>> But these are the least of my worries since on my customers machine I >>>>>> get the NPE, but in testing here I do not? Any ideas on this NPE? >>>>>> >>>>>> Thx. >>>>>> >>>>>> David >>>>>> >>>>>> >>>>>> ________________________________ >>>>>> From: Taariq Levack <taar...@gmail.com> >>>>>> To: "users@camel.apache.org" <users@camel.apache.org> >>>>>> Sent: Thursday, 29 December 2011, 17:14 >>>>>> Subject: Re: NPE for FTP endpoint >>>>>> >>>>>> Hi >>>>>> >>>>>> Did you try this FAQ[1] on how to stop a route from a route? >>>>>> [1] http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html >>>>>> >>>>>> Taariq >>>>>> >>>>>> On 29 Dec 2011, at 6:12 PM, David Wynter <david_wyn...@yahoo.com> wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> I tested on my machine and deployed to my customer, It went boom as >>>>>>> follows, names etc. changed to protect the innocent. >>>>>>> >>>>>>> All I want to do with this route is grab a file from a ftp service, >>>>>>> once, don't poll it annoys them, leave the file intact on their server. >>>>>>> I will control when this route is run externally. I tried it with >>>>>>> start() follow by stop(), >>>>>>> >>>>>>> camelContext.addRouteDefinition(routeD); >>>>>>> camelContext.startRoute(routeD); >>>>>>> but the DefaultShutdownStrategy is flaky, on a slow machine it does not >>>>>>> consider the route started before the stop() is hit, whereas on a fast >>>>>>> machine it does. So I am forced to leave the route running >> >> >> >> -- >> Claus Ibsen >> ----------------- >> FuseSource >> Email: cib...@fusesource.com >> Web: http://fusesource.com >> Twitter: davsclaus, fusenews >> Blog: http://davsclaus.blogspot.com/ >> Author of Camel in Action: http://www.manning.com/ibsen/ > > > > -- > Claus Ibsen > ----------------- > FuseSource > Email: cib...@fusesource.com > Web: http://fusesource.com > Twitter: davsclaus, fusenews > Blog: http://davsclaus.blogspot.com/ > Author of Camel in Action: http://www.manning.com/ibsen/ -- Claus Ibsen ----------------- FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/