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 <aldettin...@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(".+")); + } }