Class JakartaWebSocketFrameHandlerFactory
- Direct Known Subclasses:
JakartaWebSocketClientFrameHandlerFactory
-
Field Summary
Modifier and TypeFieldDescriptionprotected final WebSocketComponents
protected final JakartaWebSocketContainer
protected final InvokerUtils.ParamIdentifier
-
Constructor Summary
ConstructorDescriptionJakartaWebSocketFrameHandlerFactory
(JakartaWebSocketContainer container, InvokerUtils.ParamIdentifier paramIdentifier) -
Method Summary
Modifier and TypeMethodDescriptionstatic MethodHandle
bindTemplateVariables
(MethodHandle target, String[] namedVariables, Map<String, String> templateValues) Bind the URI Template Variables to their provided values, converting to the type that the MethodHandle target has declared.protected JakartaWebSocketFrameHandlerMetadata
createEndpointMetadata
(jakarta.websocket.EndpointConfig endpointConfig) static MessageSink
createMessageSink
(JakartaWebSocketSession session, JakartaWebSocketMessageMetadata msgMetadata) protected JakartaWebSocketFrameHandlerMetadata
discoverJakartaFrameHandlerMetadata
(Class<?> endpointClass, JakartaWebSocketFrameHandlerMetadata metadata) static MethodHandles.Lookup
getApplicationMethodHandleLookup
(Class<?> lookupClass) Gives aMethodHandles.Lookup
instance to be used to find public methods in application classes.abstract JakartaWebSocketFrameHandlerMetadata
getMetadata
(Class<?> endpointClass, jakarta.websocket.EndpointConfig endpointConfig) static MethodHandles.Lookup
Gives aMethodHandles.Lookup
instance to be used to find methods in server classes.abstract jakarta.websocket.EndpointConfig
newDefaultEndpointConfig
(Class<?> endpointClass) newJakartaWebSocketFrameHandler
(Object endpointInstance, UpgradeRequest upgradeRequest) static MethodHandle
wrapNonVoidReturnType
(MethodHandle handle, JakartaWebSocketSession session)
-
Field Details
-
container
-
paramIdentifier
-
components
-
-
Constructor Details
-
JakartaWebSocketFrameHandlerFactory
public JakartaWebSocketFrameHandlerFactory(JakartaWebSocketContainer container, InvokerUtils.ParamIdentifier paramIdentifier)
-
-
Method Details
-
getMetadata
public abstract JakartaWebSocketFrameHandlerMetadata getMetadata(Class<?> endpointClass, jakarta.websocket.EndpointConfig endpointConfig) -
newDefaultEndpointConfig
-
newJakartaWebSocketFrameHandler
public JakartaWebSocketFrameHandler newJakartaWebSocketFrameHandler(Object endpointInstance, UpgradeRequest upgradeRequest) -
createMessageSink
public static MessageSink createMessageSink(JakartaWebSocketSession session, JakartaWebSocketMessageMetadata msgMetadata) -
wrapNonVoidReturnType
public static MethodHandle wrapNonVoidReturnType(MethodHandle handle, JakartaWebSocketSession session) -
createEndpointMetadata
protected JakartaWebSocketFrameHandlerMetadata createEndpointMetadata(jakarta.websocket.EndpointConfig endpointConfig) -
discoverJakartaFrameHandlerMetadata
protected JakartaWebSocketFrameHandlerMetadata discoverJakartaFrameHandlerMetadata(Class<?> endpointClass, JakartaWebSocketFrameHandlerMetadata metadata) -
bindTemplateVariables
public static MethodHandle bindTemplateVariables(MethodHandle target, String[] namedVariables, Map<String, String> templateValues) Bind the URI Template Variables to their provided values, converting to the type that the MethodHandle target has declared.Conversion follows the JSR356 rules for @PathParam and only supports String, Primitive Types (and their Boxed version)
- Parameters:
target
- the target MethodHandle to work with. This is assumed to contain aMethodHandle.type()
where all of the initial parameters are the same parameters as found in the providednamedVariables
array.namedVariables
- the array of named variables. Can be null.templateValues
- the Map of template values (Key to Value), must have same number of entries thatnamedVariables
has.- Returns:
- a MethodHandle where all of the
namedVariables
in the target type have been statically assigned a converted value (and removed from the resultingMethodHandle.type()
, or null if notarget
MethodHandle was provided.
-
getServerMethodHandleLookup
Gives a
MethodHandles.Lookup
instance to be used to find methods in server classes. For lookups on application classes usegetApplicationMethodHandleLookup(Class)
instead.This uses the caller sensitive
MethodHandles.lookup()
, this will allow MethodHandle access to server classes we need to use and will give access permissions to private methods as well.- Returns:
- a lookup object to be used to find methods on server classes.
-
getApplicationMethodHandleLookup
Gives a
MethodHandles.Lookup
instance to be used to find public methods in application classes. For lookups on server classes usegetServerMethodHandleLookup()
instead.This uses
MethodHandles.publicLookup()
as we only need access to public method of the lookupClass. To look up a method on the lookupClass, it must be public and the class must be accessible from this module, so if the lookupClass is in a JPMS module it must be exported so that the public methods of the lookupClass are accessible outside of the module.The
MethodHandles.Lookup.in(Class)
allows us to search specifically in the endpoint Class to avoid any potential linkage errors which could occur if the same class is present in multiple web apps. Unlike usingMethodHandles.publicLookup()
usingMethodHandles.lookup()
withMethodHandles.Lookup.in(Class)
will cause the lookup to lose its public access to the lookup class if they are in different modules.MethodHandles.privateLookupIn(Class, MethodHandles.Lookup)
is also unsuitable because it requires the caller module to read the target module, and the target module to open reflective access to the lookupClasses private methods. This is possible but requires extra configuration to provide private access which is not necessary for the purpose of accessing the public methods.- Parameters:
lookupClass
- the desired lookup class for the new lookup object.- Returns:
- a lookup object to be used to find methods on the lookupClass.
-