quarkiverse / quarkus-renarde

Server-side Web Framework with Qute templating, magic/easier controllers, auth, reverse-routing
Apache License 2.0
78 stars 19 forks source link

Qute parsing issue with renarde 3.0.5-SNAPSHOT and quarkus 3.5.0 #179

Closed starksm64 closed 10 months ago

starksm64 commented 11 months ago

If I take the current renarde repo and build a 3.0.5-SNAPSHOT using Java 21, and then update the https://github.com/FroMage/quarkus-renarde-todo.git main branch to use quarkus 3.5.0 and the rendarde 3.0.5-SNAPSHOT ala:

diff --git a/pom.xml b/pom.xml
index 29fc13f..3964623 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,9 +14,9 @@
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
     <quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id>
-    <quarkus.platform.version>3.3.2</quarkus.platform.version>
+    <quarkus.platform.version>3.5.0</quarkus.platform.version>
     <surefire-plugin.version>3.0.0-M5</surefire-plugin.version>
-    <renarde.version>3.0.4</renarde.version>
+    <renarde.version>3.0.5-SNAPSHOT</renarde.version>
   </properties>
   <dependencyManagement>
     <dependencies>

and do a quarkus build, I see a problem with handling the VARCHAR_SIZE global variable, and nearly all TodoResourceTest(s) are failing. This is the rendering error:

2023-10-29 11:04:42,273 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-1) HTTP Request to /Login/confirm?confirmationCode=f5b906ec-4fa1-4550-86ef-76e577b00ffa failed, error id: 9e7d39f6-cf20-483c-bb7b-72dbb9144c38-1: io.quarkus.qute.TemplateException: Rendering error in template [tags/input] line 7: Property "VARCHAR_SIZE" not found on the base object "io.quarkus.qute.Mapper$1" in expression {VARCHAR_SIZE}
        at io.quarkus.qute.TemplateException$Builder.build(TemplateException.java:169)
        at io.quarkus.qute.EvaluatorImpl.propertyNotFound(EvaluatorImpl.java:229)
        at io.quarkus.qute.EvaluatorImpl.resolve(EvaluatorImpl.java:199)
        at io.quarkus.qute.EvaluatorImpl.resolveReference(EvaluatorImpl.java:126)
        at io.quarkus.qute.EvaluatorImpl.evaluate(EvaluatorImpl.java:85)
        at io.quarkus.qute.ResolutionContextImpl.evaluate(ResolutionContextImpl.java:29)
        at io.quarkus.qute.ExpressionNode.resolve(ExpressionNode.java:36)
        at io.quarkus.qute.SectionNode$SectionResolutionContextImpl.execute(SectionNode.java:228)
        at io.quarkus.qute.SectionHelper$SectionResolutionContext.execute(SectionHelper.java:66)
        at io.quarkus.qute.Parser$1.resolve(Parser.java:1274)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:53)
        at io.quarkus.qute.IncludeSectionHelper.lambda$resolve$1(IncludeSectionHelper.java:68)
        at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)
        at java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:887)
        at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2357)
        at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:144)
        at io.quarkus.qute.IncludeSectionHelper.resolve(IncludeSectionHelper.java:51)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:53)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:58)
        at io.quarkus.qute.SectionNode$SectionResolutionContextImpl.execute(SectionNode.java:224)
        at io.quarkus.qute.SectionHelper$SectionResolutionContext.execute(SectionHelper.java:76)
        at io.quarkus.qute.UserTagSectionHelper.addAdditionalEvaluatedParams(UserTagSectionHelper.java:39)
        at io.quarkus.qute.IncludeSectionHelper.lambda$resolve$1(IncludeSectionHelper.java:55)
        at io.quarkus.qute.CompletedStage.whenComplete(CompletedStage.java:285)
        at io.quarkus.qute.IncludeSectionHelper.resolve(IncludeSectionHelper.java:51)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:53)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:58)
        at io.quarkus.qute.SectionNode$SectionResolutionContextImpl.execute(SectionNode.java:228)
        at io.quarkus.qute.SectionHelper$SectionResolutionContext.execute(SectionHelper.java:76)
        at io.quarkus.qute.UserTagSectionHelper.addAdditionalEvaluatedParams(UserTagSectionHelper.java:39)
        at io.quarkus.qute.IncludeSectionHelper.lambda$resolve$1(IncludeSectionHelper.java:55)
        at io.smallrye.context.impl.wrappers.SlowContextualBiConsumer.accept(SlowContextualBiConsumer.java:21)
        at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)
        at java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:887)
        at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2357)
        at io.smallrye.context.CompletableFutureWrapper.whenComplete(CompletableFutureWrapper.java:417)
        at io.smallrye.context.CompletableFutureWrapper.whenComplete(CompletableFutureWrapper.java:17)
        at io.quarkus.qute.IncludeSectionHelper.resolve(IncludeSectionHelper.java:51)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:53)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:58)
        at io.quarkus.qute.SectionNode$SectionResolutionContextImpl.execute(SectionNode.java:228)
        at io.quarkus.qute.InsertSectionHelper.resolve(InsertSectionHelper.java:20)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:53)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:58)
        at io.quarkus.qute.SectionNode$SectionResolutionContextImpl.execute(SectionNode.java:228)
        at io.quarkus.qute.SectionHelper$SectionResolutionContext.execute(SectionHelper.java:66)
        at io.quarkus.qute.Parser$1.resolve(Parser.java:1274)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:53)
        at io.quarkus.qute.IncludeSectionHelper.resolve(IncludeSectionHelper.java:48)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:53)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:58)
        at io.quarkus.qute.SectionNode$SectionResolutionContextImpl.execute(SectionNode.java:224)
        at io.quarkus.qute.SectionHelper$SectionResolutionContext.execute(SectionHelper.java:66)
        at io.quarkus.qute.Parser$1.resolve(Parser.java:1274)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:53)
        at io.quarkus.qute.SectionNode.resolve(SectionNode.java:58)
        at io.quarkus.qute.TemplateImpl$TemplateInstanceImpl.renderData(TemplateImpl.java:233)
        at io.quarkus.qute.TemplateImpl$TemplateInstanceImpl.renderAsyncNoTimeout(TemplateImpl.java:224)
        at io.smallrye.context.impl.wrappers.SlowContextualSupplier.get(SlowContextualSupplier.java:21)
        at io.smallrye.mutiny.operators.uni.builders.UniCreateFromCompletionStage.subscribe(UniCreateFromCompletionStage.java:24)
        at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:36)
        at io.smallrye.mutiny.operators.uni.UniFailOnTimeout.subscribe(UniFailOnTimeout.java:36)
        at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:36)
        at io.smallrye.mutiny.groups.UniSubscribe.withSubscriber(UniSubscribe.java:51)
        at io.smallrye.mutiny.groups.UniSubscribe.with(UniSubscribe.java:110)
        at io.smallrye.mutiny.groups.UniSubscribe.with(UniSubscribe.java:88)
        at org.jboss.resteasy.reactive.server.handlers.UniResponseHandler.handle(UniResponseHandler.java:19)
        at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:150)
        at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
        at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:582)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
        at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:1583)

It does not seem to be a simple Qute problem because I have added a basic test to io.quarkus.qute.deployment.globals.TemplateGlobalTest in the quarkus-core/qute extension and it does not show any problems finding the global var.

One can workaround this issue by updating the src/main/resources/templates/tags/input.html file to use the following maxlength expression:

maxlength="{VARCHAR_SIZE ?: 255}"

FroMage commented 11 months ago

This is related to the Qute change where globals are no longer visible to tags.

gbourant commented 11 months ago

FroMage, is referring to isolated tags

image

starksm64 commented 10 months ago

Ok, closing as a change in behavior