blob: 3cf6644d2766f3b779af85337993b97ae7f6bc7f [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>Session</title>
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Session";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":6,"i28":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../jakarta/websocket/SendResult.html" title="class in jakarta.websocket"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../jakarta/websocket/SessionException.html" title="class in jakarta.websocket"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?jakarta/websocket/Session.html" target="_top">Frames</a></li>
<li><a href="Session.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">jakarta.websocket</div>
<h2 title="Interface Session" class="title">Interface Session</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Superinterfaces:</dt>
<dd>java.lang.AutoCloseable, java.io.Closeable</dd>
</dl>
<hr>
<br>
<pre>public interface <span class="typeNameLabel">Session</span>
extends java.io.Closeable</pre>
<div class="block">A Web Socket session represents a conversation between two web socket endpoints. As soon as the websocket handshake
completes successfully, the web socket implementation provides the endpoint an open websocket session. The endpoint
can then register interest in incoming messages that are part of this newly created session by providing a
MessageHandler to the session, and can send messages to the other end of the conversation by means of the
RemoteEndpoint object obtained from this session.
<p>
Once the session is closed, it is no longer valid for use by applications. Calling any of its methods (with the
exception of the close() methods) once the session has been closed will result in an
<code>IllegalStateException</code> being thrown. Developers should retrieve any information from the session
during the <a href="../../jakarta/websocket/Endpoint.html#onClose-jakarta.websocket.Session-jakarta.websocket.CloseReason-"><code>Endpoint.onClose(jakarta.websocket.Session, jakarta.websocket.CloseReason)</code></a> method. Following the convention of <code>Closeable</code> calling the Session
close() methods after the Session has been closed has no effect.
<p>
Session objects may be called by multiple threads. Implementations must ensure the integrity of the mutable
properties of the session under such circumstances.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>&lt;T&gt;&nbsp;void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#addMessageHandler-java.lang.Class-jakarta.websocket.MessageHandler.Partial-">addMessageHandler</a></span>(java.lang.Class&lt;T&gt;&nbsp;clazz,
<a href="../../jakarta/websocket/MessageHandler.Partial.html" title="interface in jakarta.websocket">MessageHandler.Partial</a>&lt;T&gt;&nbsp;handler)</code>
<div class="block">Register to handle to incoming messages in this conversation.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>&lt;T&gt;&nbsp;void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#addMessageHandler-java.lang.Class-jakarta.websocket.MessageHandler.Whole-">addMessageHandler</a></span>(java.lang.Class&lt;T&gt;&nbsp;clazz,
<a href="../../jakarta/websocket/MessageHandler.Whole.html" title="interface in jakarta.websocket">MessageHandler.Whole</a>&lt;T&gt;&nbsp;handler)</code>
<div class="block">Register to handle to incoming messages in this conversation.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#addMessageHandler-jakarta.websocket.MessageHandler-">addMessageHandler</a></span>(<a href="../../jakarta/websocket/MessageHandler.html" title="interface in jakarta.websocket">MessageHandler</a>&nbsp;handler)</code>
<div class="block">Register to handle to incoming messages in this conversation.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#close--">close</a></span>()</code>
<div class="block">Close the current conversation with a normal status code and no reason phrase.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#close-jakarta.websocket.CloseReason-">close</a></span>(<a href="../../jakarta/websocket/CloseReason.html" title="class in jakarta.websocket">CloseReason</a>&nbsp;closeReason)</code>
<div class="block">Close the current conversation, giving a reason for the closure.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code><a href="../../jakarta/websocket/RemoteEndpoint.Async.html" title="interface in jakarta.websocket">RemoteEndpoint.Async</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getAsyncRemote--">getAsyncRemote</a></span>()</code>
<div class="block">Return a reference a RemoteEndpoint object representing the peer of this conversation that is able to send
messages asynchronously to the peer.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code><a href="../../jakarta/websocket/RemoteEndpoint.Basic.html" title="interface in jakarta.websocket">RemoteEndpoint.Basic</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getBasicRemote--">getBasicRemote</a></span>()</code>
<div class="block">Return a reference a RemoteEndpoint object representing the peer of this conversation that is able to send
messages synchronously to the peer.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code><a href="../../jakarta/websocket/WebSocketContainer.html" title="interface in jakarta.websocket">WebSocketContainer</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getContainer--">getContainer</a></span>()</code>
<div class="block">Return the container that this session is part of.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getId--">getId</a></span>()</code>
<div class="block">Returns a string containing the unique identifier assigned to this session.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getMaxBinaryMessageBufferSize--">getMaxBinaryMessageBufferSize</a></span>()</code>
<div class="block">The maximum length of incoming binary messages that this Session can buffer.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getMaxIdleTimeout--">getMaxIdleTimeout</a></span>()</code>
<div class="block">Return the number of milliseconds before this conversation may be closed by the container if it is inactive, i.e.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getMaxTextMessageBufferSize--">getMaxTextMessageBufferSize</a></span>()</code>
<div class="block">The maximum length of incoming text messages that this Session can buffer.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>java.util.Set&lt;<a href="../../jakarta/websocket/MessageHandler.html" title="interface in jakarta.websocket">MessageHandler</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getMessageHandlers--">getMessageHandlers</a></span>()</code>
<div class="block">Return an unmodifiable copy of the set of MessageHandlers for this Session.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>java.util.List&lt;<a href="../../jakarta/websocket/Extension.html" title="interface in jakarta.websocket">Extension</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getNegotiatedExtensions--">getNegotiatedExtensions</a></span>()</code>
<div class="block">Return the list of extensions currently in use for this conversation.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getNegotiatedSubprotocol--">getNegotiatedSubprotocol</a></span>()</code>
<div class="block">Return the sub protocol agreed during the websocket handshake for this conversation.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>java.util.Set&lt;<a href="../../jakarta/websocket/Session.html" title="interface in jakarta.websocket">Session</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getOpenSessions--">getOpenSessions</a></span>()</code>
<div class="block">Return a copy of the Set of all the open web socket sessions that represent connections to the same endpoint to
which this session represents a connection.</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code>java.util.Map&lt;java.lang.String,java.lang.String&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getPathParameters--">getPathParameters</a></span>()</code>
<div class="block">Return a map of the path parameter names and values used associated with the request this session was opened
under.</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getProtocolVersion--">getProtocolVersion</a></span>()</code>
<div class="block">Returns the version of the websocket protocol currently being used.</div>
</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getQueryString--">getQueryString</a></span>()</code>
<div class="block">Return the query string associated with the request this session was opened under.</div>
</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code>java.util.Map&lt;java.lang.String,java.util.List&lt;java.lang.String&gt;&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getRequestParameterMap--">getRequestParameterMap</a></span>()</code>
<div class="block">Return the request parameters associated with the request this session was opened under.</div>
</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code>java.net.URI</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getRequestURI--">getRequestURI</a></span>()</code>
<div class="block">Return the URI under which this session was opened, including the query string if there is one.</div>
</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>java.security.Principal</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getUserPrincipal--">getUserPrincipal</a></span>()</code>
<div class="block">Return the authenticated user for this Session or <code>null</code> if no user is authenticated for this session.</div>
</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code>java.util.Map&lt;java.lang.String,java.lang.Object&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#getUserProperties--">getUserProperties</a></span>()</code>
<div class="block">While the session is open, this method returns a Map that the developer may use to store application specific
information relating to this session instance.</div>
</td>
</tr>
<tr id="i23" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#isOpen--">isOpen</a></span>()</code>
<div class="block">Return true if and only if the underlying socket is open.</div>
</td>
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#isSecure--">isSecure</a></span>()</code>
<div class="block">Return true if and only if the underlying socket is using a secure transport.</div>
</td>
</tr>
<tr id="i25" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#removeMessageHandler-jakarta.websocket.MessageHandler-">removeMessageHandler</a></span>(<a href="../../jakarta/websocket/MessageHandler.html" title="interface in jakarta.websocket">MessageHandler</a>&nbsp;handler)</code>
<div class="block">Remove the given MessageHandler from the set belonging to this session.</div>
</td>
</tr>
<tr id="i26" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#setMaxBinaryMessageBufferSize-int-">setMaxBinaryMessageBufferSize</a></span>(int&nbsp;length)</code>
<div class="block">Sets the maximum length of incoming binary messages that this Session can buffer.</div>
</td>
</tr>
<tr id="i27" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#setMaxIdleTimeout-long-">setMaxIdleTimeout</a></span>(long&nbsp;milliseconds)</code>
<div class="block">Set the non-zero number of milliseconds before this session will be closed by the container if it is inactive, ie
no messages are either sent or received.</div>
</td>
</tr>
<tr id="i28" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/websocket/Session.html#setMaxTextMessageBufferSize-int-">setMaxTextMessageBufferSize</a></span>(int&nbsp;length)</code>
<div class="block">Sets the maximum length of incoming text messages that this Session can buffer.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="getContainer--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getContainer</h4>
<pre><a href="../../jakarta/websocket/WebSocketContainer.html" title="interface in jakarta.websocket">WebSocketContainer</a>&nbsp;getContainer()</pre>
<div class="block">Return the container that this session is part of.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the container.</dd>
</dl>
</li>
</ul>
<a name="addMessageHandler-jakarta.websocket.MessageHandler-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMessageHandler</h4>
<pre>void&nbsp;addMessageHandler(<a href="../../jakarta/websocket/MessageHandler.html" title="interface in jakarta.websocket">MessageHandler</a>&nbsp;handler)
throws java.lang.IllegalStateException</pre>
<div class="block">Register to handle to incoming messages in this conversation. A maximum of one message handler per native
websocket message type (text, binary, pong) may be added to each Session. I.e. a maximum of one message handler
to handle incoming text messages a maximum of one message handler for handling incoming binary messages, and a
maximum of one for handling incoming pong messages. For further details of which message handlers handle which of
the native websocket message types please see <a href="../../jakarta/websocket/MessageHandler.Whole.html" title="interface in jakarta.websocket"><code>MessageHandler.Whole</code></a> and <a href="../../jakarta/websocket/MessageHandler.Partial.html" title="interface in jakarta.websocket"><code>MessageHandler.Partial</code></a>.
Adding more than one of any one type will result in a runtime exception.
<p>
This method is not safe to use unless you are providing an anonymous class derived directly from
<a href="../../jakarta/websocket/MessageHandler.Whole.html" title="interface in jakarta.websocket"><code>MessageHandler.Whole</code></a> or <a href="../../jakarta/websocket/MessageHandler.Partial.html" title="interface in jakarta.websocket"><code>MessageHandler.Partial</code></a>. In all other
cases (Lambda Expressions, more complex inheritance or generic type arrangements), one of the following methods
have to be used: <a href="../../jakarta/websocket/Session.html#addMessageHandler-java.lang.Class-jakarta.websocket.MessageHandler.Whole-"><code>addMessageHandler(Class, jakarta.websocket.MessageHandler.Whole)</code></a> or
<a href="../../jakarta/websocket/Session.html#addMessageHandler-java.lang.Class-jakarta.websocket.MessageHandler.Partial-"><code>addMessageHandler(Class, jakarta.websocket.MessageHandler.Partial)</code></a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>handler</code> - the MessageHandler to be added.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalStateException</code> - if there is already a MessageHandler registered for the same native websocket
message type as this handler.</dd>
</dl>
</li>
</ul>
<a name="addMessageHandler-java.lang.Class-jakarta.websocket.MessageHandler.Whole-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMessageHandler</h4>
<pre>&lt;T&gt;&nbsp;void&nbsp;addMessageHandler(java.lang.Class&lt;T&gt;&nbsp;clazz,
<a href="../../jakarta/websocket/MessageHandler.Whole.html" title="interface in jakarta.websocket">MessageHandler.Whole</a>&lt;T&gt;&nbsp;handler)</pre>
<div class="block">Register to handle to incoming messages in this conversation. A maximum of one message handler per native
websocket message type (text, binary, pong) may be added to each Session. I.e. a maximum of one message handler
to handle incoming text messages a maximum of one message handler for handling incoming binary messages, and a
maximum of one for handling incoming pong messages. For further details of which message handlers handle which of
the native websocket message types please see <a href="../../jakarta/websocket/MessageHandler.Whole.html" title="interface in jakarta.websocket"><code>MessageHandler.Whole</code></a> and <a href="../../jakarta/websocket/MessageHandler.Partial.html" title="interface in jakarta.websocket"><code>MessageHandler.Partial</code></a>.
Adding more than one of any one type will result in a runtime exception.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - type of message that the given handler is intended for.</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>clazz</code> - type of the message processed by message handler to be registered.</dd>
<dd><code>handler</code> - whole message handler to be added.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalStateException</code> - if there is already a MessageHandler registered for the same native websocket
message type as this handler.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>WebSocket 1.1</dd>
</dl>
</li>
</ul>
<a name="addMessageHandler-java.lang.Class-jakarta.websocket.MessageHandler.Partial-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMessageHandler</h4>
<pre>&lt;T&gt;&nbsp;void&nbsp;addMessageHandler(java.lang.Class&lt;T&gt;&nbsp;clazz,
<a href="../../jakarta/websocket/MessageHandler.Partial.html" title="interface in jakarta.websocket">MessageHandler.Partial</a>&lt;T&gt;&nbsp;handler)</pre>
<div class="block">Register to handle to incoming messages in this conversation. A maximum of one message handler per native
websocket message type (text, binary, pong) may be added to each Session. I.e. a maximum of one message handler
to handle incoming text messages a maximum of one message handler for handling incoming binary messages, and a
maximum of one for handling incoming pong messages. For further details of which message handlers handle which of
the native websocket message types please see <a href="../../jakarta/websocket/MessageHandler.Whole.html" title="interface in jakarta.websocket"><code>MessageHandler.Whole</code></a> and <a href="../../jakarta/websocket/MessageHandler.Partial.html" title="interface in jakarta.websocket"><code>MessageHandler.Partial</code></a>.
Adding more than one of any one type will result in a runtime exception.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - type of message that the given handler is intended for.</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>clazz</code> - type of the message processed by message handler to be registered.</dd>
<dd><code>handler</code> - partial message handler to be added.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalStateException</code> - if there is already a MessageHandler registered for the same native websocket
message type as this handler.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>WebSocket 1.1</dd>
</dl>
</li>
</ul>
<a name="getMessageHandlers--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMessageHandlers</h4>
<pre>java.util.Set&lt;<a href="../../jakarta/websocket/MessageHandler.html" title="interface in jakarta.websocket">MessageHandler</a>&gt;&nbsp;getMessageHandlers()</pre>
<div class="block">Return an unmodifiable copy of the set of MessageHandlers for this Session.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the set of message handlers.</dd>
</dl>
</li>
</ul>
<a name="removeMessageHandler-jakarta.websocket.MessageHandler-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeMessageHandler</h4>
<pre>void&nbsp;removeMessageHandler(<a href="../../jakarta/websocket/MessageHandler.html" title="interface in jakarta.websocket">MessageHandler</a>&nbsp;handler)</pre>
<div class="block">Remove the given MessageHandler from the set belonging to this session. This method may block if the given
handler is processing a message until it is no longer in use.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>handler</code> - the handler to be removed.</dd>
</dl>
</li>
</ul>
<a name="getProtocolVersion--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getProtocolVersion</h4>
<pre>java.lang.String&nbsp;getProtocolVersion()</pre>
<div class="block">Returns the version of the websocket protocol currently being used. This is taken as the value of the
Sec-WebSocket-Version header used in the opening handshake. i.e. "13".</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the protocol version.</dd>
</dl>
</li>
</ul>
<a name="getNegotiatedSubprotocol--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getNegotiatedSubprotocol</h4>
<pre>java.lang.String&nbsp;getNegotiatedSubprotocol()</pre>
<div class="block">Return the sub protocol agreed during the websocket handshake for this conversation.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the negotiated subprotocol, or the empty string if there isn't one.</dd>
</dl>
</li>
</ul>
<a name="getNegotiatedExtensions--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getNegotiatedExtensions</h4>
<pre>java.util.List&lt;<a href="../../jakarta/websocket/Extension.html" title="interface in jakarta.websocket">Extension</a>&gt;&nbsp;getNegotiatedExtensions()</pre>
<div class="block">Return the list of extensions currently in use for this conversation.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the negotiated extensions.</dd>
</dl>
</li>
</ul>
<a name="isSecure--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isSecure</h4>
<pre>boolean&nbsp;isSecure()</pre>
<div class="block">Return true if and only if the underlying socket is using a secure transport.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>whether its using a secure transport.</dd>
</dl>
</li>
</ul>
<a name="isOpen--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isOpen</h4>
<pre>boolean&nbsp;isOpen()</pre>
<div class="block">Return true if and only if the underlying socket is open.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>whether the session is active.</dd>
</dl>
</li>
</ul>
<a name="getMaxIdleTimeout--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMaxIdleTimeout</h4>
<pre>long&nbsp;getMaxIdleTimeout()</pre>
<div class="block">Return the number of milliseconds before this conversation may be closed by the container if it is inactive, i.e.
no messages are either sent or received in that time.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the timeout in milliseconds.</dd>
</dl>
</li>
</ul>
<a name="setMaxIdleTimeout-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setMaxIdleTimeout</h4>
<pre>void&nbsp;setMaxIdleTimeout(long&nbsp;milliseconds)</pre>
<div class="block">Set the non-zero number of milliseconds before this session will be closed by the container if it is inactive, ie
no messages are either sent or received. A value that is 0 or negative indicates the session will never timeout
due to inactivity.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>milliseconds</code> - the number of milliseconds.</dd>
</dl>
</li>
</ul>
<a name="setMaxBinaryMessageBufferSize-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setMaxBinaryMessageBufferSize</h4>
<pre>void&nbsp;setMaxBinaryMessageBufferSize(int&nbsp;length)</pre>
<div class="block">Sets the maximum length of incoming binary messages that this Session can buffer.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>length</code> - the maximum length.</dd>
</dl>
</li>
</ul>
<a name="getMaxBinaryMessageBufferSize--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMaxBinaryMessageBufferSize</h4>
<pre>int&nbsp;getMaxBinaryMessageBufferSize()</pre>
<div class="block">The maximum length of incoming binary messages that this Session can buffer. If the implementation receives a
binary message that it cannot buffer because it is too large, it must close the session with a close code of
<a href="../../jakarta/websocket/CloseReason.CloseCodes.html#TOO_BIG"><code>CloseReason.CloseCodes.TOO_BIG</code></a>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the maximum binary message size that can be buffered.</dd>
</dl>
</li>
</ul>
<a name="setMaxTextMessageBufferSize-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setMaxTextMessageBufferSize</h4>
<pre>void&nbsp;setMaxTextMessageBufferSize(int&nbsp;length)</pre>
<div class="block">Sets the maximum length of incoming text messages that this Session can buffer.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>length</code> - the maximum length.</dd>
</dl>
</li>
</ul>
<a name="getMaxTextMessageBufferSize--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMaxTextMessageBufferSize</h4>
<pre>int&nbsp;getMaxTextMessageBufferSize()</pre>
<div class="block">The maximum length of incoming text messages that this Session can buffer. If the implementation receives a text
message that it cannot buffer because it is too large, it must close the session with a close code of
<a href="../../jakarta/websocket/CloseReason.CloseCodes.html#TOO_BIG"><code>CloseReason.CloseCodes.TOO_BIG</code></a>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the maximum text message size that can be buffered.</dd>
</dl>
</li>
</ul>
<a name="getAsyncRemote--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getAsyncRemote</h4>
<pre><a href="../../jakarta/websocket/RemoteEndpoint.Async.html" title="interface in jakarta.websocket">RemoteEndpoint.Async</a>&nbsp;getAsyncRemote()</pre>
<div class="block">Return a reference a RemoteEndpoint object representing the peer of this conversation that is able to send
messages asynchronously to the peer.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the remote endpoint.</dd>
</dl>
</li>
</ul>
<a name="getBasicRemote--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getBasicRemote</h4>
<pre><a href="../../jakarta/websocket/RemoteEndpoint.Basic.html" title="interface in jakarta.websocket">RemoteEndpoint.Basic</a>&nbsp;getBasicRemote()</pre>
<div class="block">Return a reference a RemoteEndpoint object representing the peer of this conversation that is able to send
messages synchronously to the peer.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the remote endpoint.</dd>
</dl>
</li>
</ul>
<a name="getId--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getId</h4>
<pre>java.lang.String&nbsp;getId()</pre>
<div class="block">Returns a string containing the unique identifier assigned to this session. The identifier is assigned by the web
socket implementation and is implementation dependent.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the unique identifier for this session instance.</dd>
</dl>
</li>
</ul>
<a name="close--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>close</h4>
<pre>void&nbsp;close()
throws java.io.IOException</pre>
<div class="block">Close the current conversation with a normal status code and no reason phrase.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>close</code>&nbsp;in interface&nbsp;<code>java.lang.AutoCloseable</code></dd>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>close</code>&nbsp;in interface&nbsp;<code>java.io.Closeable</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code> - if there was a connection error closing the connection.</dd>
</dl>
</li>
</ul>
<a name="close-jakarta.websocket.CloseReason-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>close</h4>
<pre>void&nbsp;close(<a href="../../jakarta/websocket/CloseReason.html" title="class in jakarta.websocket">CloseReason</a>&nbsp;closeReason)
throws java.io.IOException</pre>
<div class="block">Close the current conversation, giving a reason for the closure. The close call causes the implementation to
attempt notify the client of the close as soon as it can. This may cause the sending of unsent messages
immediately prior to the close notification. After the close notification has been sent the implementation
notifies the endpoint's onClose method. Note the websocket specification defines the acceptable uses of status
codes and reason phrases. If the application cannot determine a suitable close code to use for the closeReason,
it is recommended to use <a href="../../jakarta/websocket/CloseReason.CloseCodes.html#NO_STATUS_CODE"><code>CloseReason.CloseCodes.NO_STATUS_CODE</code></a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>closeReason</code> - the reason for the closure.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code> - if there was a connection error closing the connection</dd>
</dl>
</li>
</ul>
<a name="getRequestURI--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRequestURI</h4>
<pre>java.net.URI&nbsp;getRequestURI()</pre>
<div class="block">Return the URI under which this session was opened, including the query string if there is one.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the request URI.</dd>
</dl>
</li>
</ul>
<a name="getRequestParameterMap--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRequestParameterMap</h4>
<pre>java.util.Map&lt;java.lang.String,java.util.List&lt;java.lang.String&gt;&gt;&nbsp;getRequestParameterMap()</pre>
<div class="block">Return the request parameters associated with the request this session was opened under. The request parameters
will have been part of the HTTP upgrade request which is limited by RFC 6455 to only use the HTTP GET method.
Therefore, the parameters in the returned Map will be a representation of the parameters contained in the query
string.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the unmodifiable map of the request parameters.</dd>
</dl>
</li>
</ul>
<a name="getQueryString--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getQueryString</h4>
<pre>java.lang.String&nbsp;getQueryString()</pre>
<div class="block">Return the query string associated with the request this session was opened under.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the query string</dd>
</dl>
</li>
</ul>
<a name="getPathParameters--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPathParameters</h4>
<pre>java.util.Map&lt;java.lang.String,java.lang.String&gt;&nbsp;getPathParameters()</pre>
<div class="block">Return a map of the path parameter names and values used associated with the request this session was opened
under.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the unmodifiable map of path parameters. The key of the map is the parameter name, the values in the map
are the parameter values.</dd>
</dl>
</li>
</ul>
<a name="getUserProperties--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getUserProperties</h4>
<pre>java.util.Map&lt;java.lang.String,java.lang.Object&gt;&nbsp;getUserProperties()</pre>
<div class="block">While the session is open, this method returns a Map that the developer may use to store application specific
information relating to this session instance. The developer may retrieve information from this Map at any time
between the opening of the session and during the onClose() method. But outside that time, any information stored
using this Map may no longer be kept by the container. Web socket applications running on distributed
implementations of the web container should make any application specific objects stored here
java.io.Serializable, or the object may not be recreated after a failover.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>an editable Map of application data.</dd>
</dl>
</li>
</ul>
<a name="getUserPrincipal--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getUserPrincipal</h4>
<pre>java.security.Principal&nbsp;getUserPrincipal()</pre>
<div class="block">Return the authenticated user for this Session or <code>null</code> if no user is authenticated for this session.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the user principal.</dd>
</dl>
</li>
</ul>
<a name="getOpenSessions--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getOpenSessions</h4>
<pre>java.util.Set&lt;<a href="../../jakarta/websocket/Session.html" title="interface in jakarta.websocket">Session</a>&gt;&nbsp;getOpenSessions()</pre>
<div class="block">Return a copy of the Set of all the open web socket sessions that represent connections to the same endpoint to
which this session represents a connection. The Set includes the session this method is called on. These sessions
may not still be open at any point after the return of this method. For example, iterating over the set at a
later time may yield one or more closed sessions. Developers should use session.isOpen() to check.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the set of sessions, open at the time of return.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../jakarta/websocket/SendResult.html" title="class in jakarta.websocket"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../jakarta/websocket/SessionException.html" title="class in jakarta.websocket"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?jakarta/websocket/Session.html" target="_top">Frames</a></li>
<li><a href="Session.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>