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

Reply via email to