This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/master by this push: new f0b5e21 Fix NPE if Qute template can't be found f0b5e21 is described below commit f0b5e21558944fdd949c07237dc45c73e23fd6e9 Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Thu Apr 1 13:21:36 2021 +0100 Fix NPE if Qute template can't be found Fixes #2410 --- .../apache/camel/component/qute/QuteEndpoint.java | 7 +++++ .../quarkus/component/qute/it/QuteResource.java | 30 ++++++++++++++++++---- .../camel/quarkus/component/qute/it/QuteTest.java | 22 ++++++++++++++-- 3 files changed, 52 insertions(+), 7 deletions(-) diff --git a/extensions/qute/component/src/main/java/org/apache/camel/component/qute/QuteEndpoint.java b/extensions/qute/component/src/main/java/org/apache/camel/component/qute/QuteEndpoint.java index 615f9c6..1b19fd6 100644 --- a/extensions/qute/component/src/main/java/org/apache/camel/component/qute/QuteEndpoint.java +++ b/extensions/qute/component/src/main/java/org/apache/camel/component/qute/QuteEndpoint.java @@ -27,6 +27,7 @@ import io.quarkus.qute.Engine; import io.quarkus.qute.EngineBuilder; import io.quarkus.qute.ReflectionValueResolver; import io.quarkus.qute.Template; +import io.quarkus.qute.TemplateException; import io.quarkus.qute.TemplateInstance; import io.quarkus.qute.TemplateLocator.TemplateLocation; import io.quarkus.qute.Variant; @@ -187,9 +188,15 @@ public class QuteEndpoint extends ResourceEndpoint { Engine engine = getQuteEngine(); if (content == null) { template = engine.getTemplate(path); + if (template == null) { + throw new TemplateException("Unable to parse Qute template from path: " + path); + } } else { // This is the first time to parse the content template = engine.parse(content); + if (template == null) { + throw new TemplateException("Unable to parse Qute template"); + } } instance = template.instance(); } diff --git a/integration-tests/qute/src/main/java/org/apache/camel/quarkus/component/qute/it/QuteResource.java b/integration-tests/qute/src/main/java/org/apache/camel/quarkus/component/qute/it/QuteResource.java index 1b31c9c..cdb126f 100644 --- a/integration-tests/qute/src/main/java/org/apache/camel/quarkus/component/qute/it/QuteResource.java +++ b/integration-tests/qute/src/main/java/org/apache/camel/quarkus/component/qute/it/QuteResource.java @@ -19,27 +19,47 @@ package org.apache.camel.quarkus.component.qute.it; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.ws.rs.GET; +import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; +import org.apache.camel.CamelExecutionException; import org.apache.camel.ProducerTemplate; -import org.jboss.logging.Logger; +import org.apache.camel.component.qute.QuteConstants; @Path("/qute") @ApplicationScoped public class QuteResource { - private static final Logger LOG = Logger.getLogger(QuteResource.class); - @Inject ProducerTemplate producerTemplate; - @Path("/get/{name}") + @Path("/template") + @POST + @Produces(MediaType.TEXT_PLAIN) + public String getTemplateFromHeader(String content) throws Exception { + return producerTemplate.requestBodyAndHeader("qute:hello?allowTemplateFromHeader=true", "World", + QuteConstants.QUTE_TEMPLATE, content, String.class); + } + + @Path("/template/{name}") @GET @Produces(MediaType.TEXT_PLAIN) - public String get(@PathParam("name") String name) throws Exception { + public String getTemplateFromPath(@PathParam("name") String name) throws Exception { return producerTemplate.requestBody("direct:test", name, String.class); } + + @Path("/template/invalid/path") + @GET + @Produces(MediaType.TEXT_PLAIN) + public String getInvalidTemplatePath() throws Exception { + try { + producerTemplate.requestBody("qute:invalid-path", "test", String.class); + return null; + } catch (CamelExecutionException e) { + return e.getCause().getMessage(); + } + } } diff --git a/integration-tests/qute/src/test/java/org/apache/camel/quarkus/component/qute/it/QuteTest.java b/integration-tests/qute/src/test/java/org/apache/camel/quarkus/component/qute/it/QuteTest.java index fcc1527..1f64f4f 100644 --- a/integration-tests/qute/src/test/java/org/apache/camel/quarkus/component/qute/it/QuteTest.java +++ b/integration-tests/qute/src/test/java/org/apache/camel/quarkus/component/qute/it/QuteTest.java @@ -26,7 +26,25 @@ import static org.hamcrest.Matchers.is; class QuteTest { @Test - public void test() { - RestAssured.when().get("/qute/get/World").then().body(is("Hello World")); + public void testTemplate() { + RestAssured.get("/qute/template/World") + .then() + .body(is("Hello World")); + } + + @Test + public void testInvalidTemplatePath() { + RestAssured.get("/qute/template/invalid/path") + .then() + .body(is("Unable to parse Qute template from path: invalid-path")); + } + + @Test + public void tesTemplateContentFromHeader() { + RestAssured.given() + .body("Hello {body}") + .post("/qute/template") + .then() + .body(is("Hello World")); } }