Question

I am trying to access a job parameter from a mapper file. The following in part of my xml code :

<!-- job -->
<job id="processEFTFileJob" restartable="true"  >
    <step id="step1">
        <tasklet>
            <chunk reader="sDItemReader" writer="sDItemWriter" processor="sDItemProcessor" commit-interval="1" />
        </tasklet>
    </step>
    <validator ref="sDJobParametersValidator"></validator>  
    <listeners>
        <listener ref="jobFailureListener"/>
    </listeners>
</job>

<!-- job parameter -->
<beans:bean id="sDJobParametersValidator" class="com.cv.cib.common.gfmas.aob.s.d.SDJobParametersValidator">
     <beans:property name="fileParameterName" value="${filetojob.fileParameterName}"/>
</beans:bean>

<beans:bean id="sDItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
     <beans:property name="resource" value="file:#{jobParameters['input.file.name']}" />
     <beans:property name="lineMapper" ref="sDLineMapper" />
</beans:bean>

 <beans:bean id="sDLineMapper" class="org.springframework.batch.item.file.mapping.PatternMatchingCompositeLineMapper">
    <beans:property name="tokenizers">
        <beans:map>
            <beans:entry key="01*" value-ref="header" />
            <beans:entry key="02*" value-ref="details" />
        </beans:map>
    </beans:property>
    <beans:property name="fieldSetMappers">
        <beans:map>
            <beans:entry key="01*" value-ref="sDHeaderLineMapper" />
            <beans:entry key="02*" value-ref="sDDetailsLineMapper" /> 
        </beans:map>
    </beans:property>
 </beans:bean>

<!-- point to mapper java file respectively -->
 <beans:bean id="sDHeaderLineMapper" class="com.cv.cib.common.gfmas.aob.s.d.SDHeaderFieldSetMapper" />
 <beans:bean id="sDDetailsLineMapper" class="com.cv.cib.common.gfmas.aob.s.d.SDDetailsFieldSetMapper" />

I can access the file name in SDJobParametersValidator.java and do my validation here.

However, I would like to access the file name in SDHeaderFieldSetMapper.java also, Google long time but yet cant get the solution. Any ideas on this?

The following is part of my code in SDJobParametersValidator.java to get the file name :

public void validate(JobParameters parameters)
            throws JobParametersInvalidException {
//some other code here
final String name = parameters.getString( fileParameterName );

        File file = new File( name );
        logger.debug( file.getName( ) );

//some other code here
}
Was it helpful?

Solution

To get a job parameter, you inject it into a step scoped bean. You're already doing that with the sDItemReader. To get it in your mapper, add a setter, say setFileName(String name), and configure your mapper like below:

<beans:bean id="sDHeaderLineMapper" class="com.cv.cib.common.gfmas.aob.s.d.SDHeaderFieldSetMapper" scope="step">
    <beans:property name="fileName" value="#{jobParameters['input.file.name']}"/>
</beans:bean>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top