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:14:18 UTC
[camel-quarkus] branch 2.7.x 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 2.7.x
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/2.7.x by this push:
new a59c387 paho: fix NullPointerException when MqqtException occurs during reconnect attempt in native mode #3671
a59c387 is described below
commit a59c38722d42baa67c8ce157867ca2a8c3bdb3c3
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(".+"));
+ }
}