@@ -125,6 +125,26 @@ private static class WildFlyResourceCache {
125125 }
126126 }
127127
128+ // If no direct XNIO Worker found, try to extract from WebSocketDeploymentInfo
129+ if (worker == null ) {
130+ log .info ("WildFly HTTP/2 Integration: Attempting to extract XNIO Worker from WebSocketDeploymentInfo..." );
131+ Object wsInfo = servletContext .getAttribute ("io.undertow.websockets.jsr.WebSocketDeploymentInfo" );
132+ if (wsInfo != null ) {
133+ try {
134+ // Use reflection to access WebSocketDeploymentInfo.getWorker()
135+ java .lang .reflect .Method getWorkerMethod = wsInfo .getClass ().getMethod ("getWorker" );
136+ Object extractedWorker = getWorkerMethod .invoke (wsInfo );
137+ if (extractedWorker instanceof XnioWorker ) {
138+ worker = (XnioWorker ) extractedWorker ;
139+ discovery .append ("Extracted XnioWorker from WebSocketDeploymentInfo, " );
140+ log .info (" *** XNIO Worker EXTRACTED from WebSocketDeploymentInfo: " + extractedWorker .getClass ().getName ());
141+ }
142+ } catch (Exception e ) {
143+ log .info (" Failed to extract XNIO Worker from WebSocketDeploymentInfo: " + e .getMessage ());
144+ }
145+ }
146+ }
147+
128148 // Search for Buffer Pool with detailed logging
129149 log .info ("WildFly HTTP/2 Integration: Searching for Buffer Pool in servlet context..." );
130150 for (String name : poolNames ) {
@@ -146,6 +166,58 @@ private static class WildFlyResourceCache {
146166 }
147167 }
148168
169+ // If no direct Buffer Pool found, try to extract from XNIO Worker
170+ if (pool == null && worker != null ) {
171+ log .info ("WildFly HTTP/2 Integration: Attempting to extract Buffer Pool from XNIO Worker..." );
172+ try {
173+ // Use reflection to access XnioWorker.getBufferPool()
174+ java .lang .reflect .Method getBufferPoolMethod = worker .getClass ().getMethod ("getBufferPool" );
175+ Object extractedPool = getBufferPoolMethod .invoke (worker );
176+ if (extractedPool instanceof Pool ) {
177+ @ SuppressWarnings ("unchecked" )
178+ Pool <ByteBuffer > bufferPool = (Pool <ByteBuffer >) extractedPool ;
179+ pool = bufferPool ;
180+ discovery .append ("Extracted BufferPool from XnioWorker, " );
181+ log .info (" *** Buffer Pool EXTRACTED from XnioWorker: " + extractedPool .getClass ().getName ());
182+ }
183+ } catch (Exception e ) {
184+ log .info (" Failed to extract Buffer Pool from XNIO Worker: " + e .getMessage ());
185+ }
186+ }
187+
188+ // If still no Buffer Pool found, try to extract from ServerWebSocketContainer
189+ if (pool == null ) {
190+ log .info ("WildFly HTTP/2 Integration: Attempting to extract Buffer Pool from ServerWebSocketContainer..." );
191+ Object wsContainer = servletContext .getAttribute ("jakarta.websocket.server.ServerContainer" );
192+ if (wsContainer != null ) {
193+ try {
194+ // Try to access underlying Undertow components through ServerWebSocketContainer
195+ java .lang .reflect .Method getWorkerMethod = wsContainer .getClass ().getMethod ("getXnioWorker" );
196+ Object containerWorker = getWorkerMethod .invoke (wsContainer );
197+ if (containerWorker instanceof XnioWorker ) {
198+ XnioWorker xnioWorker = (XnioWorker ) containerWorker ;
199+ if (worker == null ) {
200+ worker = xnioWorker ;
201+ discovery .append ("Extracted XnioWorker from ServerWebSocketContainer, " );
202+ log .info (" *** XNIO Worker EXTRACTED from ServerWebSocketContainer: " + containerWorker .getClass ().getName ());
203+ }
204+ // Try to get buffer pool from this worker
205+ java .lang .reflect .Method getBufferPoolMethod = xnioWorker .getClass ().getMethod ("getBufferPool" );
206+ Object extractedPool = getBufferPoolMethod .invoke (xnioWorker );
207+ if (extractedPool instanceof Pool ) {
208+ @ SuppressWarnings ("unchecked" )
209+ Pool <ByteBuffer > bufferPool = (Pool <ByteBuffer >) extractedPool ;
210+ pool = bufferPool ;
211+ discovery .append ("Extracted BufferPool from ServerWebSocketContainer XnioWorker, " );
212+ log .info (" *** Buffer Pool EXTRACTED from ServerWebSocketContainer XnioWorker: " + extractedPool .getClass ().getName ());
213+ }
214+ }
215+ } catch (Exception e ) {
216+ log .info (" Failed to extract components from ServerWebSocketContainer: " + e .getMessage ());
217+ }
218+ }
219+ }
220+
149221 this .xnioWorker = worker ;
150222 this .sharedBufferPool = pool ;
151223 this .integrationAvailable = (worker != null && pool != null );
0 commit comments