Skip to content

Commit 2a07bb5

Browse files
AXIS2-6099 add better Wildfly dep verification
1 parent 14ba6dd commit 2a07bb5

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

modules/transport-h2/src/main/java/org/apache/axis2/transport/h2/integration/moshi/UndertowAxis2BufferIntegration.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)