Создание экземпляра IWebContext внутри JmsListener весной - PullRequest
0 голосов
/ 22 апреля 2019

Приложение Spring работает как API для отдыха.

Предположим, что в какой-то момент сообщение с некоторой информацией будет сгенерировано и сохранено в очереди AWS SQS.

Когда вызывается JMSListener, я пытаюсь создать отчет в формате pdf с помощью thymeleaf и openhtmltopdf. У меня возникают проблемы при создании экземпляра IWebContext, потому что ему нужны HttpServletRequest, HttpServletResponse и Locale в качестве параметров. Локаль не является проблемой, поскольку я мог бы включить ее как часть сообщения SQS, но я застрял с REQ и RES.

Код, который я использую:

IWebContext ctx = new WebContext(¿REQUEST?, ¿RESPONSE?, servletContext, locale, mapParams);
String processedHtml = templateEngine.process(template, ctx);

try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
    PdfRendererBuilder builder = new PdfRendererBuilder();
    builder.useSVGDrawer(new BatikSVGDrawer());
    builder.useFastMode();
    builder.withHtmlContent(processedHtml, baseUrl);
    builder.toStream(bos);
    builder.run();
    return bos.toByteArray();
} catch (Exception e) {
    logger.error("xxx");
}

Поскольку он вызывается внутри аннотированного метода @JmsListener (destination = "$ {aws.sqs.queue.name}"), я не могу использовать ни одну из следующих опций:

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();

Потому что:

RequestContextHolder.getRequestAttributes()

всегда равно нулю.

Спасибо и всего наилучшего.

1 Ответ

1 голос
/ 22 апреля 2019

Я не думаю, что вы должны использовать IWebContext для этого. Вместо этого просто используйте org.thymeleaf.context.Context.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...