Возврат информации о задании Spring Batch в формате XML - PullRequest
0 голосов
/ 26 июня 2018

Когда я делаю запрос, я хочу получить некоторую информацию в формате xml. Вот пример кода, который у меня есть

@RequestMapping(value = "/batch/xml/", method = RequestMethod.GET, produces="application/xml")
    @ResponseBody
    public String getXML() {
        return xml here;
    }
}

Я хотел бы вернуть имя задания, идентификатор выполнения задания и статус задания в формате XML.

Я попытался найти, но не смог найти ничего, связанного с моей темой. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 06 июля 2018

Я решил свою проблему. Код ниже. Контроллер вызывает сервис для анализа информации, а затем форматирует вывод в XML.

Контроллер

 @RequestMapping(value = "/batch/{progName}", method = RequestMethod.GET)
    public ResponseEntity<JobResults> process(@PathVariable("progName") String progName,
                                                        @RequestHeader("Content-Type") MediaType contentType,
                                                        @RequestHeader("Accept") List<MediaType> accept) throws Exception {
        HttpHeaders responseHeaders = MccControllerUtils.createCacheDisabledHeaders();
        responseHeaders.setContentType(MediaType.APPLICATION_XML);
        if(!contentType.toString().equals("*/*") && !accept.toString().equals("*/*")) {
            responseHeaders.setContentType(contentType);
            responseHeaders.setAccept(accept);
        }
        LOGGER.info("Running batch program " + progName);
        JobResults response = batchService.processProgName(progName);
        return new ResponseEntity<JobResults>(response, responseHeaders, HttpStatus.OK);
    }

Услуги

 @Override
    public JobResults processProgName(String progName) throws Exception {

        String jobName = "call" + progName.toUpperCase() + "Job";
        JobExecution jobExecution = null;
        String result = "";
        Long jobId = null;
        JobResults results = new JobResults();
        BatchStatus jobStatus = null;
        try {
            // Launch the appropriate batch job.
            Map<String, Job> jobs = applicationContext.getBeansOfType(Job.class);
            LOGGER.info("BATCHSTART:Starting sync batch job:" + jobName);
            JobParametersBuilder builder = new JobParametersBuilder();
            // Pass in the runtime to ensure a fresh execution.
            builder.addDate("Runtime", new Date());
            jobExecution = jobLauncher.run(jobs.get(jobName), builder.toJobParameters());
            jobId = jobExecution.getId();
            jobStatus = jobExecution.getStatus();
            results.setName(jobName);
            results.setId(jobId);
            results.setMessage("The job has finished.");
            results.setStatus(jobStatus);
            LOGGER.info("The job ID is " + jobId);
            LOGGER.info("BATCHEND:Completed sync batch job:" + jobName);
            LOGGER.info("Completion status for batch job " + jobName + " is " + jobExecution.getStatus().name());
            List<Throwable> failures = jobExecution.getAllFailureExceptions();
            if (failures.isEmpty()) {
                result = jobExecution.getExecutionContext().getString(AbstractSetupTasklet.BATCH_PROGRAM_RESULT);
            } else {
                for (Throwable fail : failures) {
                    result += fail.getMessage() + "\n";
                }
            }
            LOGGER.info("The job results are: " + result);
        } catch (JobExecutionAlreadyRunningException | JobRestartException | JobInstanceAlreadyCompleteException
                | JobParametersInvalidException e) {
            throw new RuntimeException("An error occurred while attempting to execute a job. " + e.getMessage(), e);
        }
        return results;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...