You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by al...@apache.org on 2022/03/28 18:07:58 UTC

[camel-quarkus] branch main updated: paho: fix NullPointerException when MqqtException occurs during reconnect attempt in native mode #3671

This is an automated email from the ASF dual-hosted git repository.

aldettinger pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new 9e6c99a  paho: fix NullPointerException when MqqtException occurs during reconnect attempt in native mode #3671
9e6c99a is described below

commit 9e6c99aafae98117eff8852ef927d85aec1166bf
Author: aldettinger <al...@gmail.com>
AuthorDate: Thu Mar 24 09:23:04 2022 +0100

    paho: fix NullPointerException when MqqtException occurs during reconnect attempt in native mode #3671
---
 .../quarkus/component/paho/deployment/PahoProcessor.java  | 15 +++++++++++----
 .../apache/camel/quarkus/component/paho/PahoResource.java | 14 ++++++++++++++
 .../apache/camel/quarkus/component/paho/it/PahoTest.java  | 10 ++++++++++
 3 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/extensions/paho/deployment/src/main/java/org/apache/camel/quarkus/component/paho/deployment/PahoProcessor.java b/extensions/paho/deployment/src/main/java/org/apache/camel/quarkus/component/paho/deployment/PahoProcessor.java
index d109168..5c9ba8a 100644
--- a/extensions/paho/deployment/src/main/java/org/apache/camel/quarkus/component/paho/deployment/PahoProcessor.java
+++ b/extensions/paho/deployment/src/main/java/org/apache/camel/quarkus/component/paho/deployment/PahoProcessor.java
@@ -16,11 +16,15 @@
  */
 package org.apache.camel.quarkus.component.paho.deployment;
 
+import java.util.ResourceBundle;
+
+import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBundleBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
+import org.eclipse.paho.client.mqttv3.internal.ResourceBundleCatalog;
 import org.eclipse.paho.client.mqttv3.logging.JSR47Logger;
 import org.eclipse.paho.client.mqttv3.spi.NetworkModuleFactory;
 
@@ -33,8 +37,10 @@ class PahoProcessor {
     }
 
     @BuildStep
-    ReflectiveClassBuildItem registerReflectiveClasses() {
-        return new ReflectiveClassBuildItem(false, false, JSR47Logger.class);
+    void registerReflectiveClasses(BuildProducer<ReflectiveClassBuildItem> p) {
+        p.produce(new ReflectiveClassBuildItem(false, false, JSR47Logger.class));
+        p.produce(new ReflectiveClassBuildItem(false, false, ResourceBundleCatalog.class));
+        p.produce(new ReflectiveClassBuildItem(false, false, ResourceBundle.class));
     }
 
     @BuildStep
@@ -48,7 +54,8 @@ class PahoProcessor {
     }
 
     @BuildStep
-    NativeImageResourceBundleBuildItem registerResourceBundle() {
-        return new NativeImageResourceBundleBuildItem("org.eclipse.paho.client.mqttv3.internal.nls.logcat");
+    void registerResourceBundle(BuildProducer<NativeImageResourceBundleBuildItem> p) {
+        p.produce(new NativeImageResourceBundleBuildItem("org.eclipse.paho.client.mqttv3.internal.nls.logcat"));
+        p.produce(new NativeImageResourceBundleBuildItem("org.eclipse.paho.client.mqttv3.internal.nls.messages"));
     }
 }
diff --git a/integration-tests/paho/src/main/java/org/apache/camel/quarkus/component/paho/PahoResource.java b/integration-tests/paho/src/main/java/org/apache/camel/quarkus/component/paho/PahoResource.java
index 845ec25..74b3ca4 100644
--- a/integration-tests/paho/src/main/java/org/apache/camel/quarkus/component/paho/PahoResource.java
+++ b/integration-tests/paho/src/main/java/org/apache/camel/quarkus/component/paho/PahoResource.java
@@ -31,6 +31,7 @@ import javax.ws.rs.core.Response;
 
 import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.ProducerTemplate;
+import org.eclipse.paho.client.mqttv3.MqttException;
 
 @Path("/paho")
 @ApplicationScoped
@@ -73,4 +74,17 @@ public class PahoResource {
         producerTemplate.sendBody("paho:" + queueName + "?retained=true&brokerUrl={{broker-url.ws}}", message);
         return Response.created(new URI("https://camel.apache.org/")).build();
     }
+
+    /**
+     * This method simulates the case where an MqqtException is thrown during a reconnection attempt
+     * in the MqttCallbackExtended instance set by the PahoConsumer on endpoint startup.
+     */
+    @Path("/mqttExceptionDuringReconnectShouldSucceed")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String mqttExceptionDuringReconnectShouldSucceed() {
+        MqttException mqex = new MqttException(MqttException.REASON_CODE_BROKER_UNAVAILABLE);
+        return mqex.getMessage();
+    }
+
 }
diff --git a/integration-tests/paho/src/test/java/org/apache/camel/quarkus/component/paho/it/PahoTest.java b/integration-tests/paho/src/test/java/org/apache/camel/quarkus/component/paho/it/PahoTest.java
index 328cba0..71dd953 100644
--- a/integration-tests/paho/src/test/java/org/apache/camel/quarkus/component/paho/it/PahoTest.java
+++ b/integration-tests/paho/src/test/java/org/apache/camel/quarkus/component/paho/it/PahoTest.java
@@ -22,10 +22,12 @@ import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
 import org.apache.camel.quarkus.test.support.activemq.ActiveMQTestResource;
+import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
 
 import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.StringRegularExpression.matchesRegex;
 
 @QuarkusTest
 @QuarkusTestResource(initArgs = {
@@ -53,4 +55,12 @@ class PahoTest {
                 .statusCode(200)
                 .body(is(message));
     }
+
+    @Test
+    public void mqttExceptionDuringReconnectShouldSucceed() {
+        RestAssured.get("/paho/mqttExceptionDuringReconnectShouldSucceed")
+                .then()
+                .statusCode(200)
+                .body(matchesRegex(".+"));
+    }
 }