MCPcopy Create free account
hub / github.com/apache/tomcat / getMessageHandlers

Method getMessageHandlers

java/org/apache/tomcat/websocket/Util.java:366–439  ·  view source on GitHub ↗
(Class<?> target, MessageHandler listener,
            EndpointConfig endpointConfig, Session session)

Source from the content-addressed store, hash-verified

364
365
366 static Set<MessageHandlerResult> getMessageHandlers(Class<?> target, MessageHandler listener,
367 EndpointConfig endpointConfig, Session session) {
368
369 // Will never be more than 2 types
370 Set<MessageHandlerResult> results = new HashSet<>(2);
371
372 // Simple cases - handlers already accepts one of the types expected by
373 // the frame handling code
374 if (String.class.isAssignableFrom(target)) {
375 MessageHandlerResult result = new MessageHandlerResult(listener, MessageHandlerResultType.TEXT);
376 results.add(result);
377 } else if (ByteBuffer.class.isAssignableFrom(target)) {
378 MessageHandlerResult result = new MessageHandlerResult(listener, MessageHandlerResultType.BINARY);
379 results.add(result);
380 } else if (PongMessage.class.isAssignableFrom(target)) {
381 MessageHandlerResult result = new MessageHandlerResult(listener, MessageHandlerResultType.PONG);
382 results.add(result);
383 // Handler needs wrapping and optional decoder to convert it to one of
384 // the types expected by the frame handling code
385 } else if (byte[].class.isAssignableFrom(target)) {
386 boolean whole = MessageHandler.Whole.class.isAssignableFrom(listener.getClass());
387 MessageHandlerResult result =
388 new MessageHandlerResult(whole ?
389 new PojoMessageHandlerWholeBinary(listener, getOnMessageMethod(listener), session,
390 endpointConfig,
391 matchDecoders(target, endpointConfig, true,
392 ((WsSession) session).getInstanceManager()),
393 new Object[1], 0, true, -1, false, -1) :
394 new PojoMessageHandlerPartialBinary(listener, getOnMessagePartialMethod(listener), session,
395 new Object[2], 0, true, 1, -1, -1),
396 MessageHandlerResultType.BINARY);
397 results.add(result);
398 } else if (InputStream.class.isAssignableFrom(target)) {
399 MessageHandlerResult result = new MessageHandlerResult(
400 new PojoMessageHandlerWholeBinary(listener, getOnMessageMethod(listener), session, endpointConfig,
401 matchDecoders(target, endpointConfig, true, ((WsSession) session).getInstanceManager()),
402 new Object[1], 0, true, -1, true, -1),
403 MessageHandlerResultType.BINARY);
404 results.add(result);
405 } else if (Reader.class.isAssignableFrom(target)) {
406 MessageHandlerResult result = new MessageHandlerResult(
407 new PojoMessageHandlerWholeText(listener, getOnMessageMethod(listener), session, endpointConfig,
408 matchDecoders(target, endpointConfig, false, ((WsSession) session).getInstanceManager()),
409 new Object[1], 0, true, -1, -1),
410 MessageHandlerResultType.TEXT);
411 results.add(result);
412 } else {
413 // Handler needs wrapping and requires decoder to convert it to one
414 // of the types expected by the frame handling code
415 DecoderMatch decoderMatch =
416 matchDecoders(target, endpointConfig, ((WsSession) session).getInstanceManager());
417 Method m = getOnMessageMethod(listener);
418 if (!decoderMatch.getBinaryDecoders().isEmpty()) {
419 MessageHandlerResult result = new MessageHandlerResult(
420 new PojoMessageHandlerWholeBinary(listener, m, session, endpointConfig,
421 decoderMatch.getBinaryDecoders(), new Object[1], 0, false, -1, false, -1),
422 MessageHandlerResultType.BINARY);
423 results.add(result);

Callers 1

doAddMessageHandlerMethod · 0.95

Calls 10

getOnMessageMethodMethod · 0.95
matchDecodersMethod · 0.95
getBinaryDecodersMethod · 0.95
getTextDecodersMethod · 0.95
addMethod · 0.65
getInstanceManagerMethod · 0.65
getStringMethod · 0.65
isAssignableFromMethod · 0.45
isEmptyMethod · 0.45

Tested by

no test coverage detected