You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/01/20 14:53:17 UTC
[camel] branch camel-3.11.x updated: CAMEL-17503: fix websocket client unable to reconnect to Server after server reboot (#6792)
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-3.11.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-3.11.x by this push:
new a795221 CAMEL-17503: fix websocket client unable to reconnect to Server after server reboot (#6792)
a795221 is described below
commit a795221c591780830d00e5e2dbf8cfcc43c662f9
Author: CG <cg...@users.noreply.github.com>
AuthorDate: Thu Jan 20 22:50:13 2022 +0800
CAMEL-17503: fix websocket client unable to reconnect to Server after server reboot (#6792)
Co-authored-by: CG <ch...@thalesdigital.io>
---
.../apache/camel/component/ahc/ws/WsEndpoint.java | 8 ++++++-
.../apache/camel/component/ahc/ws/TestServlet.java | 1 +
.../component/ahc/ws/WsProducerConsumerTest.java | 27 +++++++++++++++++++++-
3 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/components/camel-ahc-ws/src/main/java/org/apache/camel/component/ahc/ws/WsEndpoint.java b/components/camel-ahc-ws/src/main/java/org/apache/camel/component/ahc/ws/WsEndpoint.java
index 2dbce5d..bc72c41 100644
--- a/components/camel-ahc-ws/src/main/java/org/apache/camel/component/ahc/ws/WsEndpoint.java
+++ b/components/camel-ahc-ws/src/main/java/org/apache/camel/component/ahc/ws/WsEndpoint.java
@@ -172,9 +172,15 @@ public class WsEndpoint extends AhcEndpoint {
}
@Override
- public void onClose(WebSocket websocket, int code, String reason) {
+ public void onClose(WebSocket socket, int code, String reason) {
LOG.debug("websocket closed - reconnecting");
try {
+ if (websocket != null) {
+ // set websocket to null and remove the listener
+ websocket.removeWebSocketListener(listener);
+ websocket.sendCloseFrame();
+ websocket = null;
+ }
reConnect();
} catch (Exception e) {
LOG.warn("Error re-connecting to websocket", e);
diff --git a/components/camel-ahc-ws/src/test/java/org/apache/camel/component/ahc/ws/TestServlet.java b/components/camel-ahc-ws/src/test/java/org/apache/camel/component/ahc/ws/TestServlet.java
index 440b9d1..99a924b 100644
--- a/components/camel-ahc-ws/src/test/java/org/apache/camel/component/ahc/ws/TestServlet.java
+++ b/components/camel-ahc-ws/src/test/java/org/apache/camel/component/ahc/ws/TestServlet.java
@@ -34,6 +34,7 @@ public class TestServlet {
@OnWebSocketConnect
public void handleConnect(Session session) {
this.session = session;
+ send("Connected!");
}
@OnWebSocketMessage
diff --git a/components/camel-ahc-ws/src/test/java/org/apache/camel/component/ahc/ws/WsProducerConsumerTest.java b/components/camel-ahc-ws/src/test/java/org/apache/camel/component/ahc/ws/WsProducerConsumerTest.java
index 1f8a800..3711794 100644
--- a/components/camel-ahc-ws/src/test/java/org/apache/camel/component/ahc/ws/WsProducerConsumerTest.java
+++ b/components/camel-ahc-ws/src/test/java/org/apache/camel/component/ahc/ws/WsProducerConsumerTest.java
@@ -40,6 +40,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
public class WsProducerConsumerTest extends CamelTestSupport {
protected static final String TEST_MESSAGE = "Hello World!";
+ protected static final String TEST_CONNECTED_MESSAGE = "Connected!";
protected static final int PORT = AvailablePortFinder.getNextAvailable();
private static final Logger LOG = LoggerFactory.getLogger(WsProducerConsumerTest.class);
@@ -139,9 +140,27 @@ public class WsProducerConsumerTest extends CamelTestSupport {
mock.assertIsSatisfied();
}
+ @Test
+ public void testRestartServer() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:restart-result");
+ mock.expectedBodiesReceived(TEST_CONNECTED_MESSAGE);
+
+ mock.assertIsSatisfied();
+
+ LOG.info("Restarting Test Server");
+ stopTestServer();
+ startTestServer();
+
+ resetMocks();
+
+ mock.expectedBodiesReceived(TEST_CONNECTED_MESSAGE);
+
+ mock.assertIsSatisfied();
+ }
+
@Override
protected RouteBuilder[] createRouteBuilders() throws Exception {
- RouteBuilder[] rbs = new RouteBuilder[2];
+ RouteBuilder[] rbs = new RouteBuilder[3];
rbs[0] = new RouteBuilder() {
public void configure() {
from("direct:input").routeId("foo")
@@ -154,6 +173,12 @@ public class WsProducerConsumerTest extends CamelTestSupport {
.to("mock:result");
}
};
+ rbs[2] = new RouteBuilder() {
+ public void configure() {
+ from("ahc-ws://localhost:" + PORT + "/restart").routeId("restart")
+ .to("mock:restart-result");
+ }
+ };
return rbs;
}
}