public static boolean webSocketHostPathMatches(String hostPath, String targetPath) {
        boolean exactPathMatch = true;

        if (ObjectHelper.isEmpty(hostPath) || ObjectHelper.isEmpty(targetPath)) {
            // This scenario should not really be possible as the input args come from the vertx-websocket consumer / producer URI
            return false;
        }

        // Paths ending with '*' are Vert.x wildcard routes so match on the path prefix
        if (hostPath.endsWith("*")) {
            exactPathMatch = false;
            hostPath = hostPath.substring(0, hostPath.lastIndexOf('*'));
        }

        String normalizedHostPath = HttpUtils.normalizePath(hostPath + "/");
        String normalizedTargetPath = HttpUtils.normalizePath(targetPath + "/");
        String[] hostPathElements = normalizedHostPath.split("/");
        String[] targetPathElements = normalizedTargetPath.split("/");

        if (exactPathMatch && hostPathElements.length != targetPathElements.length) {
            return false;
        }

        if (exactPathMatch) {
            return normalizedHostPath.equals(normalizedTargetPath);
        } else {
            return normalizedTargetPath.startsWith(normalizedHostPath);
        }
    }
@Test
    void webSocketHostNullPathNotMatches() {
        String hostPath = null;
        String targetPath = null;
        assertFalse(VertxWebsocketHelper.webSocketHostPathMatches(hostPath, targetPath));
    }