Je suis en train de mettre en place une tâche Spring Batch qui traitera un fichier multi-enregistrements. L'un des enregistrements a la structure suivante.
Ind,RecCode,AccNum,RecTypeDesc,EffectiveDate,CreditAmount,DebitAmount,BatchNumber,NumberOfTrasactions
5, 20, 100, prl, 12084, as0, 0, 3, 1
Selon la valeur du champ RecordCode, il s'agira d'un enregistrement de paiement ou d'un enregistrement d'annulation.
Je suis en train de mettre en place le PatternMatchingCompositeLineMapper pour lire les types d'enregistrements dans le fichier. J'ai créé les 2 classes d'implémentation de FieldSetMapper suivantes
@Component("paymentBatchFieldSetMapper")
public class PaymentBatchFieldSetMapper implements FieldSetMapper<PaymentBatch> {
@Override
public PaymentBatch mapFieldSet(FieldSet fieldSet) throws BindException {
// TODO Auto-generated method stub
return null;
}
}
et le second comme,
@Component("reversalBatchFieldSetMapper")
public class ReversalBatchFieldSetMapper implements FieldSetMapper<PaymentBatch> {
@Override
public PaymentBatch mapFieldSet(FieldSet fieldSet) throws BindException {
// TODO Auto-generated method stub
return null;
}
}
J'ai créé une classe d'usine comme suit pour retourner l'un ou l'autre des 2 éléments ci-dessus comme ci-dessous
@Component("achBatchFieldSetMapperFactory")
public class ACHBatchFieldSetMapperFactory {
@Autowired
private ApplicationContext applicationContext;
public FieldSetMapper<? extends AbstractACHBatch> getFieldSetMapper(RecordTypeDescription recordTypeDescription) {
FieldSetMapper<? extends AbstractACHBatch> fieldSetMapper = null;
switch(recordTypeDescription) {
case PAYMENT:
fieldSetMapper = applicationContext.getBean(PaymentBatchFieldSetMapper.class);
break;
case REVERSAL:
fieldSetMapper = applicationContext.getBean(ReversalBatchFieldSetMapper.class);
break;
}
return fieldSetMapper;
}
}
Voici la configuration du bean pour l'objet map à injecter dans PatternMatchingCompositeLineMapper.
@Bean
public Map<String, LineTokenizer> fieldSetMapperMap(FileHeaderFieldSetMapper fileHeaderFieldSetMapper, PaymentBatchFieldSetMapper paymentBatchFieldSetMapper,
ReversalBatchFieldSetMapper reversalBatchFieldSetMapper) {
Map<String, FieldSetMapper> map = new HashMap<String, FieldSetMapper>();
map.put("1*", fileHeaderFieldSetMapper);
map.put("5*", ?????);
}
Est-il possible d'utiliser l'usine pour renvoyer le mappeur FieldSet nécessaire en fonction de l'enregistrement dans le fichier ?