diff --git a/api/src/org/labkey/api/websocket/BrowserEndpoint.java b/api/src/org/labkey/api/websocket/BrowserEndpoint.java index a8d31e8a7e5..1e4e6cf5df3 100644 --- a/api/src/org/labkey/api/websocket/BrowserEndpoint.java +++ b/api/src/org/labkey/api/websocket/BrowserEndpoint.java @@ -90,10 +90,11 @@ public void modifyHandshake(ServerEndpointConfig config, HandshakeRequest reques @Override public void onOpen(Session session, EndpointConfig endpointConfig) { + String uri = null; try { - String uri = getWSRemoteUri(session, endpointConfig); - LOG.debug("BrowserEndpoint.onOpen( " + session.getRequestURI() + " -> " + uri); + uri = getWSRemoteUri(session, endpointConfig); + LOG.debug("BrowserEndpoint.onOpen( {} -> {}", session.getRequestURI(), uri); Map> requestHeaders = (Map>) endpointConfig.getUserProperties().get("requestHeaders"); this.browserSession = session; this.serverEndpoint = new ServerEndpoint(new URI(uri), requestHeaders, endpointConfig.getUserProperties()); @@ -103,7 +104,7 @@ public void onOpen(Session session, EndpointConfig endpointConfig) } catch (URISyntaxException | IOException | DeploymentException | ServletException ex) { - LOG.debug("BrowserEndpoint.onOpen", ex); + LOG.debug("BrowserEndpoint.onOpen failed to proxy {} -> {}", session.getRequestURI(), uri, ex); UnexpectedException.rethrow(ex); } } @@ -138,6 +139,13 @@ class ServerEndpoint extends Endpoint { final Map> proxyHeaders = prepareProxyHeaders(remoteURI, requestHeaders, properties); + // Log what the subclass's prepareProxyHeaders returned + LOG.trace("=== WebSocket proxy: proxyHeaders from prepareProxyHeaders ==="); + for (Map.Entry> entry : proxyHeaders.entrySet()) + { + LOG.trace(" proxyHeaders: {} = {}", entry.getKey(), entry.getValue()); + } + WebSocketContainer clientEndPoint = ContainerProvider.getWebSocketContainer(); ClientEndpointConfig config = ClientEndpointConfig.Builder.create() .configurator(new ClientEndpointConfig.Configurator() @@ -145,8 +153,26 @@ class ServerEndpoint extends Endpoint @Override public void beforeRequest(Map> headers) { + // Log incoming browser headers for debugging + LOG.trace("=== WebSocket proxy: browser request headers ==="); + for (Map.Entry> entry : requestHeaders.entrySet()) + { + LOG.trace(" Browser header: {} = {}", entry.getKey(), entry.getValue()); + } + headers.putAll(proxyHeaders); } + + @Override + public void afterResponse(HandshakeResponse hr) + { + // Log response headers from backend server for debugging + LOG.trace("=== WebSocket proxy: response headers from backend ==="); + for (Map.Entry> entry : hr.getHeaders().entrySet()) + { + LOG.trace(" Response header: {} = {}", entry.getKey(), entry.getValue()); + } + } }) .build(); serverSession = clientEndPoint.connectToServer(this, config, remoteURI);