T
- the type being converted to (for Encoder) or from (for Decoder)M
- the WebSocket message type (String
or ByteBuffer
)public abstract class ConvertingEncoderDecoderSupport<T,M> extends Object
Encoder
and/or Decoder
. It provides encode and decode method
implementations that delegate to a Spring ConversionService
.
By default, this class looks up a ConversionService
registered in the
active ApplicationContext
under
the name 'webSocketConversionService'
. This works fine for both client
and server endpoints, in a Servlet container environment. If not running in a
Servlet container, subclasses will need to override the
getConversionService()
method to provide an alternative lookup strategy.
Subclasses can extend this class and should also implement one or
both of Encoder
and Decoder
.
For convenience ConvertingEncoderDecoderSupport.BinaryEncoder
,
ConvertingEncoderDecoderSupport.BinaryDecoder
,
ConvertingEncoderDecoderSupport.TextEncoder
and
ConvertingEncoderDecoderSupport.TextDecoder
subclasses are provided.
Since JSR-356 only allows Encoder/Decoder to be registered by type, instances
of this class are therefore managed by the WebSocket runtime, and do not need to
be registered as Spring Beans. They can, however, by injected with Spring-managed
dependencies via @Autowire
.
Converters to convert between the type
and String
or
ByteBuffer
should be registered.
ConvertingEncoderDecoderSupport.BinaryEncoder
,
ConvertingEncoderDecoderSupport.BinaryDecoder
,
ConvertingEncoderDecoderSupport.TextEncoder
,
ConvertingEncoderDecoderSupport.TextDecoder
Modifier and Type | Class and Description |
---|---|
static class |
ConvertingEncoderDecoderSupport.BinaryDecoder<T>
A binary
javax.websocket.Encoder that delegates
to Spring's conversion service. |
static class |
ConvertingEncoderDecoderSupport.BinaryEncoder<T>
A binary
javax.websocket.Encoder that delegates
to Spring's conversion service. |
static class |
ConvertingEncoderDecoderSupport.TextDecoder<T>
A Text
javax.websocket.Encoder that delegates
to Spring's conversion service. |
static class |
ConvertingEncoderDecoderSupport.TextEncoder<T>
A text
javax.websocket.Encoder that delegates
to Spring's conversion service. |
Constructor and Description |
---|
ConvertingEncoderDecoderSupport() |
Modifier and Type | Method and Description |
---|---|
T |
decode(M message)
Decode the a message into an object.
|
void |
destroy()
Called to destroy the encoder/decoder.
|
M |
encode(T object)
Encode an object to a message.
|
protected ApplicationContext |
getApplicationContext()
Returns the active
ApplicationContext . |
protected ConversionService |
getConversionService()
Strategy method used to obtain the
ConversionService . |
protected TypeDescriptor |
getMessageType()
Returns the websocket message type.
|
protected TypeDescriptor |
getType()
Returns the type being converted.
|
void |
init(EndpointConfig config)
Called to initialize the encoder/decoder.
|
boolean |
willDecode(M bytes)
Determine if a given message can be decoded.
|
public void init(EndpointConfig config)
public void destroy()
Encoder.destroy()
,
Decoder.destroy()
protected ConversionService getConversionService()
ConversionService
. By default this
method expects a bean named 'webSocketConversionService'
in the
active ApplicationContext
.ConversionService
(never null)@Nullable protected ApplicationContext getApplicationContext()
ApplicationContext
. Be default this method obtains
the context via ContextLoader.getCurrentWebApplicationContext()
, which
finds the ApplicationContext loaded via ContextLoader
typically in a
Servlet container environment. When not running in a Servlet container and
not using ContextLoader
, this method should be overridden.ApplicationContext
or null
protected TypeDescriptor getType()
protected TypeDescriptor getMessageType()
@Nullable public M encode(T object) throws EncodeException
EncodeException
Encoder.Text.encode(Object)
,
Encoder.Binary.encode(Object)
public boolean willDecode(M bytes)
@Nullable public T decode(M message) throws DecodeException
DecodeException
Decoder.Text.decode(String)
,
Decoder.Binary.decode(ByteBuffer)