Code:
<bean id="oceanLoadJob" class="org.springframework.batch.core.job.SimpleJob">
<property name="steps">
<list>
<bean id="loadStep" parent="simpleStep">
<property name="itemReader" ref="oceanInvoiceReader"/>
<property name="itemWriter" ref="oceanInvoiceWriter"/>
<property name="listeners" ref="oceanLoadSkipListener"/>
<property name="skipLimit" value="10" />
<property name="skippableExceptionClasses"
value="java.lang.NumberFormatException,
java.lang.NullPointerException,
com.tgt.ecl.exception.TgtDataAccessException,
org.springframework.batch.item.file.FlatFileParseException,
org.springframework.batch.item.file.transform.FlatFileFormatException,
org.springframework.batch.item.file.transform.IncorrectLineLengthException,
org.springframework.batch.item.file.transform.IncorrectTokenCountException"/>
</bean>
</list>
</property>
<property name="restartable" value="true"/>
<property name="jobRepository" ref="simpleJobRepository"/>
</bean>
<bean id="simpleStep" class="org.springframework.batch.core.step.item.StatefulRetryStepFactoryBean" >
<property name="transactionManager" ref="JTATxManager" />
<property name="jobRepository" ref="simpleJobRepository" />
<property name="itemReader" ref="oceanInvoiceReader" />
<property name="itemWriter" ref="oceanInvoiceWriter" />
<property name="commitInterval" value="1" />
<property name="listeners" ref="oceanLoadSkipListener"/>
<property name="skipLimit" value="10" />
<property name="skippableExceptionClasses"
value="java.lang.NumberFormatException,
java.lang.NullPointerException"/>
</bean>
<bean id="oceanLoadSkipListener" class="com.tgt.ofp.invoices.oceaninvoice.listener.OceanLoadSkipListener">
<property name="dao" ref="batchErrDAO"/>
</bean>
<bean id="oceanInvoiceReader" class="com.tgt.ofp.invoices.oceaninvoice.reader.OceanInvoiceReader">
<property name="resources" value="${ofp.baseFileSystemPath}/input/invoices/oceaninvoice/*.txt"/>
<property name="delegate">
<bean class="org.springframework.batch.item.file.FlatFileItemReader">
<property name="lineTokenizer" ref="oceanFileTokenizer"/>
<property name="fieldSetMapper">
<bean class="org.springframework.batch.item.file.mapping.PassThroughFieldSetMapper" />
</property>
</bean>
</property>
</bean>
<bean id="oceanInvoiceWriter" class="com.tgt.ofp.invoices.oceaninvoice.writer.OceanInvoiceWriter">
<property name="dao" ref="oceanLoadDao"/>
<property name="paymentDAO" ref="pymtDAO"/>
</bean>
<bean id="oceanFileTokenizer" class="org.springframework.batch.item.file.transform.PrefixMatchingCompositeLineTokenizer">
<property name="tokenizers">
<map>
<entry key="H000" value-ref="oceanHeaderTokenizer"/>
<entry key="H001" value-ref="oceanInvoiceTokenizer"/>
<entry key="D001" value-ref="oceanContainerTokenizer"/>
<entry key="D002" value-ref="oceanFeeTokenizer"/>
<entry key="S001" value-ref="oceanSummaryTokenizer"/>
</map>
</property>
</bean>
<bean id="oceanHeaderTokenizer" class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
<property name="names" value="LINE_HDR,LINE_FTR"/>
<property name="columns" value="1-4,5-278"/>
</bean>
<bean id="oceanInvoiceTokenizer" class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
<property name="names" value="LINE_HDR,BOL_I,INVC_D,CRGO_RCPT_D,INVC_A,CARR_SCAC_C,LOAD_BY_C,SRVC_CON_I,VES_N,VOYG_I,POEX_C,CTRY_C,POEN_C,ACTL_DEPTR_D,EST_POEN_D,PODL_C,LINE_FTR"/>
<property name="columns" value="1-4,8-20,71-78,71-78,79-90,91-94,103-106,107-131,135-169,170-173,189-193,196-198,199-203,213-220,229-236,245-249,250-278"/>
</bean>
<bean id="oceanContainerTokenizer" class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
<property name="names" value="LINE_HDR,EQPM_I,EQPM_WT_Q,EQPM_WT_UOM,EQPM_VOL_Q,EQPM_VOL_UOM,EQPM_TYPE_C,EQPM_CTN_Q,LINE_FTR"/>
<property name="columns" value="1-4,38-48,49-60,61-61,62-73,74-74,75-78,79-87,88-278"/>
</bean>
<bean id="oceanFeeTokenizer" class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
<property name="names" value="LINE_HDR,FRT_RATE_A,FRT_RATE_UOM_C,FEE_A,FRT_EXP_C,CHRG_Q,LINE_FTR"/>
<property name="columns" value="1-4,45-56,57-58,59-70,83-85,86-94,95-278"/>
</bean>
<bean id="oceanSummaryTokenizer" class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
<property name="names" value="LINE_HDR,TOT_INVC_WT_Q,TOT_COLL_FEE_A,TOT_INVC_VOL_Q,TOT_INVC_VOL_UOM,TOT_INVC_CTN_Q,LINE_FTR"/>
<property name="columns" value="1-4,38-49,50-61,74-85,86-86,87-95,96-278"/>
</bean>