Top Description Fields Constructors Methods
org.eclipse.jetty.websocket.server

public Class WebSocketUpgradeHandler

extends Wrapper
Class Inheritance
Imports
java.util.function.Consumer, org.eclipse.jetty.server.Handler, .Request, .Response, .Server, org.eclipse.jetty.server.handler.ContextHandler, org.eclipse.jetty.util.Callback, org.eclipse.jetty.util.thread.Invocable, org.eclipse.jetty.websocket.api.WebSocketContainer, org.eclipse.jetty.websocket.core.WebSocketComponents, org.eclipse.jetty.websocket.core.server.WebSocketMappings, .WebSocketServerComponents

A Handler that may perform the upgrade from HTTP to WebSocket.

The upgrade is performed only if the request matches all the requisites necessary for the upgrade (which vary upon the HTTP protocol version), otherwise the request handling is forwarded to the Handler child of this Handler.

WebSocketUpgradeHandler may be a descendant of a ContextHandler, typically as a direct child, but possibly also further down the Handler's tree, to enable WebSocket upgrades for that ContextHandler only.

WebSocketUpgradeHandler may be a descendant of the Server, typically as a direct child, but possibly also further down the Handler's tree, to enable WebSocket upgrades for possibly multiple ContextHandlers.

Typical usage:

Server server = ...;

ContextHandler context = new ContextHandler("/app");

// Create the WebSocketUpgradeHandler.
WebSocketUpgradeHandler wsHandler = WebSocketUpgradeHandler.from(server, context, container ->
{
    // Map upgrade requests to "/app/ws" to an echo WebSocket endpoint.
    container.addMapping("/ws", (upgradeRequest, upgradeResponse, callback) -> new EchoEndPoint());
});

// Link WebSocketUpgradeHandler as a child of ContextHandler.
context.setHandler(wsHandler);

server.setHandler(context);
server.start();

A WebSocketUpgradeHandler is associated with a ServerWebSocketContainer that is exported as a request context attribute and can be retrieved in this way:

public boolean process(Request request)
{
    // Retrieve the WebSocket container from the context attributes.
    ServerWebSocketContainer container = (ServerWebSocketContainer)request.getContext().getAttribute(WebSocketContainer.class.getName());
}

Field Summary

Modifier and TypeField and Description
private final Consumer<ServerWebSocketContainer>
private final ServerWebSocketContainer

Constructor Summary

AccessConstructor and Description
public
WebSocketUpgradeHandler(ServerWebSocketContainer
the ServerWebSocketContainer of this WebSocketUpgradeHandler
container
)

Creates a new WebSocketUpgradeHandler with the given ServerWebSocketContainer.

public
WebSocketUpgradeHandler(ServerWebSocketContainer
the ServerWebSocketContainer of this WebSocketUpgradeHandler
container
,
Consumer<ServerWebSocketContainer>
a Consumer that is called to allow the ServerWebSocketContainer to be configured during the starting phase of the WebSocketUpgradeHandler
configurator
)

Creates a new WebSocketUpgradeHandler with the given ServerWebSocketContainer and the given configurator.

Method Summary

Modifier and TypeMethod and Description
public WebSocketUpgradeHandler

Returns:

this WebSocketUpgradeHandler
configure
(Consumer<ServerWebSocketContainer>
the configuration code
configurator
)

Configures the ServerWebSocketContainer associated with this WebSocketUpgradeHandler.

protected void
doStart()

Overrides org.eclipse.jetty.server.Handler.Abstract.doStart.

Starts the managed lifecycle beans in the order they were added.

public static WebSocketUpgradeHandler

Returns:

a new WebSocketUpgradeHandler
from
(Server
the Server object used to lookup common WebSocket components
server
,
ContextHandler
the ContextHandler ancestor of the returned WebSocketUpgradeHandler
context
)

Creates a new WebSocketUpgradeHandler.

public static WebSocketUpgradeHandler

Returns:

a new WebSocketUpgradeHandler
from
(Server
the Server object used to lookup common WebSocket components
server
,
ContextHandler
the ContextHandler ancestor of the returned WebSocketUpgradeHandler
context
,
Consumer<ServerWebSocketContainer>
a Consumer that is called to allow the ServerWebSocketContainer to be configured during the starting phase of the WebSocketUpgradeHandler
configurator
)

Creates a new WebSocketUpgradeHandler.

public static WebSocketUpgradeHandler

Returns:

a new WebSocketUpgradeHandler
from
(Server
the Server object used to lookup common WebSocket components
server
)

Creates a new WebSocketUpgradeHandler.

public static WebSocketUpgradeHandler

Returns:

a new WebSocketUpgradeHandler
from
(Server
the Server object used to lookup common WebSocket components
server
,
Consumer<ServerWebSocketContainer>
a Consumer that is called to allow the ServerWebSocketContainer to be configured during the starting phase of the WebSocketUpgradeHandler
configurator
)

Creates a new WebSocketUpgradeHandler.

public Invocable.InvocationType
public ServerWebSocketContainer
public boolean
handle(Request
the HTTP request to handle
request
,
Response
the HTTP response to handle
response
,
Callback
the callback to complete when the handling is complete
callback
)

Overrides org.eclipse.jetty.server.Handler.Wrapper.handle.

Implements org.eclipse.jetty.server.Request.Handler.handle.

Invoked to handle the passed HTTP request and response.

protected boolean
handle(ServerWebSocketContainer container, Request request, Response response, Callback callback)

Inherited from org.eclipse.jetty.server.Handler.Wrapper:
getHandlersetHandler

Field Detail

_configuratorback to summary
private final Consumer<ServerWebSocketContainer> _configurator
_containerback to summary
private final ServerWebSocketContainer _container

Constructor Detail

WebSocketUpgradeHandlerback to summary
public WebSocketUpgradeHandler(ServerWebSocketContainer container)

Creates a new WebSocketUpgradeHandler with the given ServerWebSocketContainer.

Parameters
container:ServerWebSocketContainer

the ServerWebSocketContainer of this WebSocketUpgradeHandler

WebSocketUpgradeHandlerback to summary
public WebSocketUpgradeHandler(ServerWebSocketContainer container, Consumer<ServerWebSocketContainer> configurator)

Creates a new WebSocketUpgradeHandler with the given ServerWebSocketContainer and the given configurator.

The configurator is invoked every time this WebSocketUpgradeHandler is started, see from(Server, ContextHandler, Consumer).

Parameters
container:ServerWebSocketContainer

the ServerWebSocketContainer of this WebSocketUpgradeHandler

configurator:Consumer<ServerWebSocketContainer>

a Consumer that is called to allow the ServerWebSocketContainer to be configured during the starting phase of the WebSocketUpgradeHandler

Method Detail

configureback to summary
public WebSocketUpgradeHandler configure(Consumer<ServerWebSocketContainer> configurator)

Configures the ServerWebSocketContainer associated with this WebSocketUpgradeHandler.

This configuration is applied immediately and lost after a restart.

Parameters
configurator:Consumer<ServerWebSocketContainer>

the configuration code

Returns:WebSocketUpgradeHandler

this WebSocketUpgradeHandler

Annotations
@Deprecated
doStartback to summary
protected void doStart() throws Exception

Overrides org.eclipse.jetty.server.Handler.Abstract.doStart.

Doc from org.eclipse.jetty.util.component.ContainerLifeCycle.doStart.

Starts the managed lifecycle beans in the order they were added.

Annotations
@Override
Exceptions
Exception:

Doc from org.eclipse.jetty.util.component.AbstractLifeCycle.doStart.

If there was a problem starting. Will cause a transition to FAILED state

fromback to summary
public static WebSocketUpgradeHandler from(Server server, ContextHandler context)

Creates a new WebSocketUpgradeHandler.

The WebSocketUpgradeHandler is not yet linked to the given ContextHandler, therefore the caller code must ensure that the returned WebSocketUpgradeHandler is a descendant of the given ContextHandler.

Parameters
server:Server

the Server object used to lookup common WebSocket components

context:ContextHandler

the ContextHandler ancestor of the returned WebSocketUpgradeHandler

Returns:WebSocketUpgradeHandler

a new WebSocketUpgradeHandler

See Also
from(Server, ContextHandler, Consumer)
fromback to summary
public static WebSocketUpgradeHandler from(Server server, ContextHandler context, Consumer<ServerWebSocketContainer> configurator)

Creates a new WebSocketUpgradeHandler.

The WebSocketUpgradeHandler is not yet linked to the given ContextHandler, therefore the caller code must ensure that the returned WebSocketUpgradeHandler is a descendant of the given ContextHandler.

The configurator parameter is invoked every time this WebSocketUpgradeHandler is started, so that the endpoint configuration (removed during the stopping phase) can be re-applied upon restart.

Parameters
server:Server

the Server object used to lookup common WebSocket components

context:ContextHandler

the ContextHandler ancestor of the returned WebSocketUpgradeHandler

configurator:Consumer<ServerWebSocketContainer>

a Consumer that is called to allow the ServerWebSocketContainer to be configured during the starting phase of the WebSocketUpgradeHandler

Returns:WebSocketUpgradeHandler

a new WebSocketUpgradeHandler

fromback to summary
public static WebSocketUpgradeHandler from(Server server)

Creates a new WebSocketUpgradeHandler.

The WebSocketUpgradeHandler is not yet linked to the given Server, therefore the caller code must ensure that the returned WebSocketUpgradeHandler is a descendant of the given Server.

Parameters
server:Server

the Server object used to lookup common WebSocket components

Returns:WebSocketUpgradeHandler

a new WebSocketUpgradeHandler

See Also
from(Server, Consumer)
fromback to summary
public static WebSocketUpgradeHandler from(Server server, Consumer<ServerWebSocketContainer> configurator)

Creates a new WebSocketUpgradeHandler.

The WebSocketUpgradeHandler is not yet linked to the given Server, therefore the caller code must ensure that the returned WebSocketUpgradeHandler is a descendant of the given Server.

The configurator parameter is invoked every time this WebSocketUpgradeHandler is started, so that the endpoint configuration (removed during the stopping phase) can be re-applied upon restart.

Parameters
server:Server

the Server object used to lookup common WebSocket components

configurator:Consumer<ServerWebSocketContainer>

a Consumer that is called to allow the ServerWebSocketContainer to be configured during the starting phase of the WebSocketUpgradeHandler

Returns:WebSocketUpgradeHandler

a new WebSocketUpgradeHandler

getInvocationTypeback to summary
public Invocable.InvocationType getInvocationType()

Overrides org.eclipse.jetty.server.Handler.Wrapper.getInvocationType.

Overrides default org.eclipse.jetty.server.Request.Handler.getInvocationType.

Returns:Invocable.InvocationType

Doc from org.eclipse.jetty.util.thread.Invocable.getInvocationType.

The InvocationType of this object

Annotations
@Override
getServerWebSocketContainerback to summary
public ServerWebSocketContainer getServerWebSocketContainer()
handleback to summary
public boolean handle(Request request, Response response, Callback callback) throws Exception

Overrides org.eclipse.jetty.server.Handler.Wrapper.handle.

Implements org.eclipse.jetty.server.Request.Handler.handle.

Doc from org.eclipse.jetty.server.Request.Handler.handle.

Invoked to handle the passed HTTP request and response.

The request is accepted by returning true, then handling must be concluded by completing the passed callback. The handling may be asynchronous, i.e. this method may return true and complete the given callback later, possibly from a different thread. If this method returns false, then the callback must not be invoked and any mutation on the response reversed.

Exceptions thrown by this method may be subsequently handled by an error Request.Handler, if present, otherwise a default HTTP 500 error is generated and the callback completed while writing the error response.

The simplest implementation is:

public boolean handle(Request request, Response response, Callback callback)
{
    callback.succeeded();
    return true;
}

A HelloWorld implementation is:

public boolean handle(Request request, Response response, Callback callback)
{
    response.write(true, ByteBuffer.wrap("Hello World\n".getBytes(StandardCharsets.UTF_8)), callback);
    return true;
}
Parameters
request:Request

the HTTP request to handle

response:Response

the HTTP response to handle

callback:Callback

the callback to complete when the handling is complete

Returns:boolean

True if and only if the request will be handled, a response generated and the callback eventually called. This may occur within the scope of the call to this method, or asynchronously some time later. If false is returned, then this method must not generate a response, nor complete the callback.

Annotations
@Override
Exceptions
Exception:
if there is a failure during the handling. Catchers cannot assume that the callback will be called and thus should attempt to complete the request as if a false had been returned.
handleback to summary
protected boolean handle(ServerWebSocketContainer container, Request request, Response response, Callback callback)