diff --git a/.gitignore b/.gitignore
index 07e8230707a..bdbbccd1176 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,4 +16,5 @@ release.properties
dist/
yarn-debug.log*
yarn-error.log*
-ddf-ui-deplist.out
\ No newline at end of file
+ddf-ui-deplist.out
+**/.java-version
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index e3547d28189..b3682d70ce1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -65,7 +65,7 @@
2.3.0
- 2.29.17
+ 2.29.18
0.9
2.3.16
4.3
diff --git a/ui-backend/catalog-ui-search/pom.xml b/ui-backend/catalog-ui-search/pom.xml
index cab17995658..cafa3ecf8ec 100644
--- a/ui-backend/catalog-ui-search/pom.xml
+++ b/ui-backend/catalog-ui-search/pom.xml
@@ -41,6 +41,21 @@
ows-v_1_1_0-schema
${ows-v_1_0_0-schema.version}
+
+ org.eclipse.jetty.websocket
+ websocket-server
+ ${jetty.version}
+
+
+ org.eclipse.jetty
+ jetty-http
+ ${jetty.version}
+
+
+ org.codice.ddf.search
+ catalog-ui-websockets
+ ${project.version}
+
org.jvnet.jaxb2_commons
jaxb2-basics-runtime
diff --git a/ui-backend/catalog-ui-search/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/ui-backend/catalog-ui-search/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index 962beee4e5d..390132c9228 100644
--- a/ui-backend/catalog-ui-search/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/ui-backend/catalog-ui-search/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -393,6 +393,7 @@ Implementation details
+
+
+
+
+
+
+
+
+
+ 4.0.0
+
+ backend
+ org.codice.ddf.search
+ 5.2.19-SNAPSHOT
+
+ bundle
+
+ catalog-ui-websockets
+ DDF :: Catalog :: UI :: Websockets
+
+
+
+ ddf.security.servlet
+ security-servlet-web-socket-api
+ ${ddf.version}
+
+
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+
+
+ ${project.artifactId}
+ /search/catalog/ws
+
+
+
+
+
+
+
+
diff --git a/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/CustomWebSocketCreator.java b/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/CustomWebSocketCreator.java
new file mode 100644
index 00000000000..b667a10d76e
--- /dev/null
+++ b/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/CustomWebSocketCreator.java
@@ -0,0 +1,15 @@
+package org.codice.ddf.catalog.ui.websockets;
+
+import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
+import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
+import org.eclipse.jetty.websocket.servlet.WebSocketCreator;
+
+public class CustomWebSocketCreator implements WebSocketCreator {
+
+ @Override
+ public Object createWebSocket(
+ ServletUpgradeRequest servletUpgradeRequest, ServletUpgradeResponse servletUpgradeResponse) {
+ return StaticHolder.webSocketCreator.createWebSocket(
+ servletUpgradeRequest, servletUpgradeResponse);
+ }
+}
diff --git a/ui-backend/catalog-ui-search/src/main/java/org/codice/ddf/catalog/ui/WebSocketContextHelper.java b/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/SearchCatalogWebSocket.java
similarity index 57%
rename from ui-backend/catalog-ui-search/src/main/java/org/codice/ddf/catalog/ui/WebSocketContextHelper.java
rename to ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/SearchCatalogWebSocket.java
index 79249e563a8..395beac1aa6 100644
--- a/ui-backend/catalog-ui-search/src/main/java/org/codice/ddf/catalog/ui/WebSocketContextHelper.java
+++ b/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/SearchCatalogWebSocket.java
@@ -11,13 +11,20 @@
* License is distributed along with this program and can be found at
* .
*/
-package org.codice.ddf.catalog.ui;
+package org.codice.ddf.catalog.ui.websockets;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.ServiceScope;
-import org.osgi.service.http.context.ServletContextHelper;
-import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardContext;
+import javax.servlet.annotation.WebServlet;
+import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
+import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
-@Component(service = ServletContextHelper.class, scope = ServiceScope.BUNDLE)
-@HttpWhiteboardContext(name = "websocketContextHelper", path = "/search/catalog/ws")
-public class WebSocketContextHelper extends ServletContextHelper {}
+@WebServlet(
+ name = "SearchCatalogWebsockets",
+ urlPatterns = {"/*", "/"},
+ asyncSupported = true
+)
+public class SearchCatalogWebSocket extends WebSocketServlet {
+ @Override
+ public void configure(WebSocketServletFactory factory) {
+ factory.setCreator(new CustomWebSocketCreator());
+ }
+}
diff --git a/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/StaticHolder.java b/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/StaticHolder.java
new file mode 100644
index 00000000000..718cf4c6adf
--- /dev/null
+++ b/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/StaticHolder.java
@@ -0,0 +1,11 @@
+package org.codice.ddf.catalog.ui.websockets;
+
+import org.eclipse.jetty.websocket.servlet.WebSocketCreator;
+
+public class StaticHolder {
+ public static WebSocketCreator webSocketCreator;
+
+ public StaticHolder(WebSocketCreator webSocketCreator) {
+ StaticHolder.webSocketCreator = webSocketCreator;
+ }
+}
diff --git a/ui-backend/catalog-ui-websockets/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/ui-backend/catalog-ui-websockets/src/main/resources/OSGI-INF/blueprint/blueprint.xml
new file mode 100644
index 00000000000..abd5f3491e9
--- /dev/null
+++ b/ui-backend/catalog-ui-websockets/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ui-backend/intrigue-ui-app/src/main/resources/features.xml b/ui-backend/intrigue-ui-app/src/main/resources/features.xml
index cffe7a7d942..c1cc56d1a08 100644
--- a/ui-backend/intrigue-ui-app/src/main/resources/features.xml
+++ b/ui-backend/intrigue-ui-app/src/main/resources/features.xml
@@ -76,6 +76,7 @@
mvn:org.codice.ddf.search/catalog-ui-enumeration/${project.version}
mvn:com.google.code.gson/gson/${gson.version}
mvn:org.codice.ddf.search/catalog-ui-splitter/${project.version}
+ mvn:org.codice.ddf.search/catalog-ui-websockets/${project.version}
mvn:org.apache.commons/commons-math3/${commons-math3.version}
mvn:org.codice.ddf.search/audit-api/${project.version}
mvn:org.codice.ddf.search/audit-application/${project.version}
diff --git a/ui-backend/pom.xml b/ui-backend/pom.xml
index cb10e30cd75..70faf89e271 100644
--- a/ui-backend/pom.xml
+++ b/ui-backend/pom.xml
@@ -25,5 +25,6 @@
audit
javalin-utils
deprecatable-enumeration-api
+ catalog-ui-websockets
diff --git a/ui-frontend/packages/catalog-ui-search/src/main/webapp/js/model/QueryResponse.ts b/ui-frontend/packages/catalog-ui-search/src/main/webapp/js/model/QueryResponse.ts
index 30b4f786b03..b23d721d0b9 100644
--- a/ui-frontend/packages/catalog-ui-search/src/main/webapp/js/model/QueryResponse.ts
+++ b/ui-frontend/packages/catalog-ui-search/src/main/webapp/js/model/QueryResponse.ts
@@ -35,7 +35,7 @@ if (StartupDataStore.Configuration.getWebSocketsEnabled() && window.WebSocket) {
// @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
const url = `${protocol[location.protocol]}//${location.hostname}:${
location.port
- }${location.pathname}ws`
+ }${location.pathname}ws/`
rpcInitial = new Client(url, { autoconnect: false })
// Only set rpc if the connection succeeds