Hi,
Sonar can’t really process any Thymeleaf templates.
The only related issue that I could find was this one: Thymeleaf errors appears
Sonar generates a Warning for all of our Thymeleaf templates.
Relevant part: ParseException: Cannot evaluate expression "#{titlePrefix}".
The templates are designed to receive information from the external environment, so I’m unsure what type of Thymeleaf templates Sonar typically processes.
[DEBUG] src/main/resources/templates/done.html recognized as thymeleaf template
[WARNING] Failed to process thymeleaf template src/main/resources/templates/done.html. It will be ignored. Cause is logged in DEBUG level.
[DEBUG] Exception when processing src/main/resources/templates/done.html
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "<!doctype html>
...
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(na:554)
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseString(na:2242)
at com.sonar.security.frontend.java.C.A.A(na:393)
at com.sonar.security.frontend.java.C.A.A(na:563)
at com.sonar.security.frontend.java.C.C.processTemplate(na:1293)
at com.sonar.security.frontend.java.C.C.execute(na:350)
at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:67)
at org.sonar.scanner.sensor.AbstractSensorsExecutor.executeSensors(AbstractSensorsExecutor.java:40)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:44)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:62)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:44)
at org.sonar.scanner.scan.SpringModuleScanContainer.doAfterStart(SpringModuleScanContainer.java:74)
at org.sonar.scanner.spring.SpringComponentContainer.startComponents(SpringComponentContainer.java:206)
at org.sonar.scanner.spring.SpringComponentContainer.execute(SpringComponentContainer.java:185)
at org.sonar.scanner.scan.SpringProjectScanContainer.scan(SpringProjectScanContainer.java:219)
at org.sonar.scanner.scan.SpringProjectScanContainer.scanRecursively(SpringProjectScanContainer.java:214)
at org.sonar.scanner.scan.SpringProjectScanContainer.doAfterStart(SpringProjectScanContainer.java:182)
at org.sonar.scanner.spring.SpringComponentContainer.startComponents(SpringComponentContainer.java:206)
at org.sonar.scanner.spring.SpringComponentContainer.execute(SpringComponentContainer.java:185)
at org.sonar.scanner.bootstrap.SpringScannerContainer.doAfterStart(SpringScannerContainer.java:509)
at org.sonar.scanner.bootstrap.SpringScannerContainer.startComponents(SpringScannerContainer.java:443)
at org.sonar.scanner.spring.SpringComponentContainer.execute(SpringComponentContainer.java:185)
at org.sonar.scanner.bootstrap.SpringGlobalContainer.doAfterStart(SpringGlobalContainer.java:149)
at org.sonar.scanner.spring.SpringComponentContainer.startComponents(SpringComponentContainer.java:206)
at org.sonar.scanner.spring.SpringComponentContainer.execute(SpringComponentContainer.java:185)
at org.sonar.scanner.bootstrap.ScannerMain.runScannerEngine(ScannerMain.java:143)
at org.sonar.scanner.bootstrap.ScannerMain.run(ScannerMain.java:58)
at org.sonar.scanner.bootstrap.ScannerMain.main(ScannerMain.java:42)
Caused by: org.attoparser.ParseException: Cannot evaluate expression "#{titlePrefix}". Message externalization expressions can only be evaluated in a template-processing environment (as a part of an in-template expression) where processing context is an implementation of class java.lang.Class, which it isn't (com.sonar.security.frontend.java.C.A$_B)
at org.attoparser.MarkupParser.parseDocument(na:1604)
at org.attoparser.MarkupParser.parse(na:1731)
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(na:3548)
... 27 common frames omitted
Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Cannot evaluate expression "#{titlePrefix}". Message externalization expressions can only be evaluated in a template-processing environment (as a part of an in-template expression) where processing context is an implementation of class java.lang.Class, which it isn't (com.sonar.security.frontend.java.C.A$_B)
at org.thymeleaf.standard.expression.MessageExpression.executeMessageExpression(na:2800)
at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(na:92)
at org.thymeleaf.standard.expression.Expression.execute(na:2145)
at org.thymeleaf.standard.expression.AdditionExpression.executeAddition(na:3421)
at org.thymeleaf.standard.expression.ComplexExpression.executeComplex(na:196)
at org.thymeleaf.standard.expression.Expression.execute(na:1507)
at org.thymeleaf.standard.expression.AdditionExpression.executeAddition(na:3421)
at org.thymeleaf.standard.expression.ComplexExpression.executeComplex(na:196)
at org.thymeleaf.standard.expression.Expression.execute(na:1507)
at org.thymeleaf.standard.expression.Expression.execute(na:1875)
at org.thymeleaf.standard.expression.Expression.execute(na:1728)
at com.sonar.security.frontend.java.C.A$_A.A(na:1753)
at com.sonar.security.frontend.java.C.A$_A.E(na:307)
at java.base/java.util.Optional.ifPresent(Unknown Source)
at com.sonar.security.frontend.java.C.A$_A.B(na:243)
at com.sonar.security.frontend.java.C.A$_A.handleOpenElement(na:1875)
at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleOpenElementEnd(na:3496)
at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleOpenElementEnd(na:344)
at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleOpenElementEnd(na:2191)
at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleOpenElementEnd(na:1765)
at org.attoparser.HtmlElement.handleOpenElementEnd(na:687)
at org.attoparser.HtmlMarkupHandler.handleOpenElementEnd(na:1295)
at org.attoparser.MarkupEventProcessorHandler.handleOpenElementEnd(na:1590)
at org.attoparser.ParsingElementMarkupUtil.parseOpenElement(na:1248)
at org.attoparser.MarkupParser.parseBuffer(na:3251)
at org.attoparser.MarkupParser.parseDocument(na:1031)
... 29 common frames omitted
Example template:
<!doctype html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<title th:text="#{titlePrefix}">App</title>
...
Q:
- Is this normal?
- Do you recommend to exclude all Thyemleaf templates from scanning?
- If there is another scanner that can process these files, how to suppress the warnings?
Best regards,
Andrei