You would need to create a BeanioIterator implementation and use the splitter eip with it.
Would be a good addition to get into camel-beanio with such an iterator. There is an iterator example in camel-mail, and I think also in camel-zipfile etc. On Tue, Apr 5, 2016 at 12:54 AM, Brad Johnson <brad.john...@mediadriver.com> wrote: > I have a beanio mapping that's rather standard and I read it in but it > appears that it reads the entire file into memory instead of streaming it. > Is there a way to change that behavior so that I can take items as they are > read and put them on a queue? > > <from uri="file:/dir/inbound" /> > <unmarshal ref="tmxPaymentTechIn" /> > <log message="Process and convert records." /> > <to uri="seda:processRecords" /> > > The file is an ole timey batch record with headers and mutli-line, fixed > width fields per record. What I'd like to see is each element header, > transaction, etc. read from the file and then put on the queue. What I get > is an array of the entire file which I can, of course, split but that will > get memory intensive. > > BeanIO works very well for this as there are variable row records (Address > for example) and it snaps that stuff up well. But I really want records or > groups to come through individually. > > > <stream name="fileIn" format="fixedlength"> > > > <record name="header" order="1" minOccurs="1" maxOccurs="1" > class="foo.Header"> > <field name="identifier" rid="true" literal="P" > position="0" length="1" /> > <field name="pid" position="4" length="6" /> > <field name="pidPassword" position="11" length="8" /> > <field name="sid" position="24" length="6" /> > <field name="sidPassword" position="31" length="8" /> > <field name="directive" position="40" length="6" /> > </record> > > <group name="transaction" order="2" minOccurs="1" > maxOccurs="unbounded" class="foo.Transaction"> > > <record name="summary" minOccurs="0" maxOccurs="1" > class="foo.Summary"> > <field name="identifier" rid="true" literal="S" > position="0" length="1" /> > > <field name="reportGroup" position="1" length="10" /> > <field name="orderId" position="11" length="8" /> > <field name="batchId" position="19" length="14" /> > <field name="actionCode" position="33" length="2" /> > > <segment name="group" class="foo.Group"> > <field name="my" position="35" length="2" /> > <field name="group" position="37" length="19" /> > <field name="info" position="56" length="4" /> > </segment> > <field name="source" position="60" length="12" /> > <field name="integerOrderSource" position="78" > length="1" /> > <field name="activityBranch" position="112" length="4" > /> > </record> > > <record name="company" class="foo.Company" minOccurs="0" > maxOccurs="1"> > <field name="companyName" rid="true" literal="AB" > position="0" length="2" /> > <field name="companyName" position="2" length="29" /> > </record> > <record name="addressList" collection="list" > class="foo.Addressline" minOccurs="0" maxOccurs="unbounded"> > <field name="identifier" rid="true" literal="A" > position="0" length="1" /> > <field name="address" position="2" length="29" /> > </record> > </group> > > <record name="BRec" order="4" class="foo.Rec" minOccurs="0" > maxOccurs="1"> > <field name="identifier" rid="true" literal="B" > position="0" length="1" /> > <field name="record" position="1" length="unbounded" /> > </record> > <record name="TRec" order="5" class="foo.Rec" minOccurs="0" > maxOccurs="1"> > <field name="identifier" rid="true" literal="T" > position="0" length="1" /> > <field name="record" position="1" length="unbounded" /> > </record> > <record name="footer" order="6" class="foo.Footer" > minOccurs="0" maxOccurs="1"> > <field name="identifier" rid="true" literal="PID" > position="0" length="3" /> > > </record> > > </stream> -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2