How to throw exception from spring batch processor process() method to Spring batch job started method?
java, spring, spring-batch, web-services
Solution
Here is startJob which I use the to start the job in web application, Tye to throw specific exception
public boolean StartJob()
throws MyException{
try {
final JobParameters jobParameters = new JobParametersBuilder()
.addLong("time", System.nanoTime())
.addString("file", jobInputFolder.getAbsolutePath())
.toJobParameters();
final JobExecution execution = jobLauncher.run(job,
jobParameters);
final ExitStatus status = execution.getExitStatus();
if (ExitStatus.COMPLETED.getExitCode().equals(
status.getExitCode())) {
result = true;
} else {
final List<Throwable> exceptions = execution
.getAllFailureExceptions();
for (final Throwable throwable : exceptions) {
if (throwable instanceof MyException) {
throw (MyException) throwable;
}
if (throwable instanceof FlatFileParseException) {
Throwable rootException = throwable.getCause();
if (rootException instanceof IncorrectTokenCountException) {
throw new MyException(logMessage, errorCode);
}
if (rootException instanceof BindException) {
BindException bindException = (BindException) rootException;
final FieldError fieldError = bindException
.getFieldError();
final String field = fieldError.getField();
throw new MyException(logMessage, errorCode);
}
}
}
}
}
} catch (JobExecutionAlreadyRunningException ex) {
} catch (JobRestartException ex) {
} catch (JobInstanceAlreadyCompleteException ex) {
} catch (JobParametersInvalidException ex) {
} catch (IOException ex) {
} finally {
}
return result;
}
If Item processor is as below
@Override
public KPData process(InputDetail inputData) throws MyException {
try {
business logic here
}
catch(Exception e) {
throw new MyException("Some issue");
}
}
Problem
I am having the Web-service method to start spring batch job.If any exception occurred in spring batch processing control is coming back till processor process method. But i need the controller to came back to web-service method there i have to catch and code to email that exception. Web-service method: ``` public void processInputFiles() throws ServiceFault { String[] springConfig = { CONTEXT_FILE_NAME }; ApplicationContext context = new ClassPathXmlApplicationContext(springConfig); try { setClientInfo(); JobLauncher jobLauncher = (JobLauncher) context.getBean(JOB_LAUNCHER); Job job = (Job) context.getBean(REMITTANCE_JOB); jobLauncher.run(job, new JobParameters()); }catch (Exception e) { String errorMessage = "LockboxService exception:: Could not process Remittance(CSV) files"; final Message message = MessageFactory.createErrorMessage(MyService.class, errorMessage, e); ErrorSenderFactory.getInstance().send(message, new Instruction[] { Instruction.ERROR_EMAIL }); } ``` Processor process method: ``` @Override public Transmission process(InputDetail remrow) throws ServiceException { try { business logic here } catch(Exception e) { throw new Exception("Unable to process row having the int number:"); } } ```