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"));
     }
 }

Reply via email to