Hi The file consumer will store the file as a GenericFile which basically is a pointer to java.io.File. So you ought to be fine to use FileInputStream or InputStream as your bean parameter. And even close it after use.
As its a bean parameter then Camel dont replace the existing message body with that, and the splitter should be able to work with the original message body as-is. It would be a different story if the message body was an InputStream that was only readable once. For that you can use stream caching from Camel. On Fri, Dec 15, 2017 at 4:48 PM, Burkard Stephan <stephan.burk...@visana.ch> wrote: > Hi Camel users > > I have a route that consumes big XML files (100 to 300 MB), splits them into > chunks and processes the chunks. > > from(pollingFileConsumer) > .routeId("bigFileConsumer") > // here I would like to make a very basic check if the file looks as > expected > .split().tokenizeXML("XmlElementNameToSplitWith").streaming() > // Continue to work with file chunk from splitter > .bean(whatever) > > > Before the splitter, I would like to check if the file is in expected format. > To avoid reading the whole big file (memory), I would like to read the first > 2000 chars (no matter if XML is invalid) and look up some required specifics > (for example with regex) like the namespace. > > What is best practice to do this? > > I could of course implement a bean and call it. But the message body is > "java.io.File". > => When I convert it into a String (implicitly by annotate the method with > "@Body String body" this converts the whole big file. > => When I read the File through a stream, I would probably have to reset the > Stream so that Camel can read the File from beginning. > > Thanks for suggestions > Stephan > > -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2