Issue #2768 - JSR356 Session.getUserProperties() is null during @OnOpen
Signed-off-by: Joakim Erdfelt <joakim.erdfelt@gmail.com>
This commit is contained in:
parent
d37b506cb1
commit
586484850f
|
@ -18,7 +18,9 @@
|
||||||
|
|
||||||
package org.eclipse.jetty.websocket.jsr356;
|
package org.eclipse.jetty.websocket.jsr356;
|
||||||
|
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
import static org.hamcrest.Matchers.notNullValue;
|
import static org.hamcrest.Matchers.notNullValue;
|
||||||
|
import static org.hamcrest.Matchers.is;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -125,7 +127,8 @@ public class ConfiguratorTest
|
||||||
session.getBasicRemote().sendText("Echo");
|
session.getBasicRemote().sendText("Echo");
|
||||||
|
|
||||||
// Wait for echo
|
// Wait for echo
|
||||||
echoer.textCapture.messageQueue.awaitMessages(1,1000,TimeUnit.MILLISECONDS);
|
String echoed = echoer.textCapture.messages.poll(1,TimeUnit.SECONDS);
|
||||||
|
assertThat("Echoed", echoed, is("Echo"));
|
||||||
|
|
||||||
// Validate client side configurator use
|
// Validate client side configurator use
|
||||||
Assert.assertThat("configurator.request",configurator.request,notNullValue());
|
Assert.assertThat("configurator.request",configurator.request,notNullValue());
|
||||||
|
|
|
@ -20,13 +20,15 @@ package org.eclipse.jetty.websocket.jsr356;
|
||||||
|
|
||||||
import javax.websocket.MessageHandler;
|
import javax.websocket.MessageHandler;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.util.BlockingArrayQueue;
|
||||||
|
|
||||||
public class EchoCaptureHandler implements MessageHandler.Whole<String>
|
public class EchoCaptureHandler implements MessageHandler.Whole<String>
|
||||||
{
|
{
|
||||||
public MessageQueue messageQueue = new MessageQueue();
|
public BlockingArrayQueue<String> messages = new BlockingArrayQueue<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMessage(String message)
|
public void onMessage(String message)
|
||||||
{
|
{
|
||||||
messageQueue.offer(message);
|
messages.offer(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,7 @@ public class EndpointEchoClient extends Endpoint
|
||||||
if (LOG.isDebugEnabled())
|
if (LOG.isDebugEnabled())
|
||||||
LOG.debug("onOpen({}, {})",session,config);
|
LOG.debug("onOpen({}, {})",session,config);
|
||||||
this.session = session;
|
this.session = session;
|
||||||
|
this.session.getUserProperties().put("endpoint", this);
|
||||||
Assert.assertThat("Session is required",session,notNullValue());
|
Assert.assertThat("Session is required",session,notNullValue());
|
||||||
Assert.assertThat("EndpointConfig is required",config,notNullValue());
|
Assert.assertThat("EndpointConfig is required",config,notNullValue());
|
||||||
this.session.addMessageHandler(textCapture);
|
this.session.addMessageHandler(textCapture);
|
||||||
|
|
|
@ -18,7 +18,9 @@
|
||||||
|
|
||||||
package org.eclipse.jetty.websocket.jsr356;
|
package org.eclipse.jetty.websocket.jsr356;
|
||||||
|
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
import static org.hamcrest.Matchers.instanceOf;
|
import static org.hamcrest.Matchers.instanceOf;
|
||||||
|
import static org.hamcrest.Matchers.is;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
@ -98,7 +100,8 @@ public class EndpointEchoTest
|
||||||
session.getBasicRemote().sendText("Echo");
|
session.getBasicRemote().sendText("Echo");
|
||||||
if (LOG.isDebugEnabled())
|
if (LOG.isDebugEnabled())
|
||||||
LOG.debug("Client Message Sent");
|
LOG.debug("Client Message Sent");
|
||||||
echoer.textCapture.messageQueue.awaitMessages(1,1000,TimeUnit.MILLISECONDS);
|
String echoed = echoer.textCapture.messages.poll(1, TimeUnit.SECONDS);
|
||||||
|
assertThat("Echoed message", echoed, is("Echo"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -113,8 +116,9 @@ public class EndpointEchoTest
|
||||||
session.getBasicRemote().sendText("Echo");
|
session.getBasicRemote().sendText("Echo");
|
||||||
if (LOG.isDebugEnabled())
|
if (LOG.isDebugEnabled())
|
||||||
LOG.debug("Client Message Sent");
|
LOG.debug("Client Message Sent");
|
||||||
// TODO: figure out echo verification.
|
EndpointEchoClient client = (EndpointEchoClient) session.getUserProperties().get("endpoint");
|
||||||
// echoer.textCapture.messageQueue.awaitMessages(1,1000,TimeUnit.MILLISECONDS);
|
String echoed = client.textCapture.messages.poll(1, TimeUnit.SECONDS);
|
||||||
|
assertThat("Echoed message", echoed, is("Echo"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -131,7 +135,8 @@ public class EndpointEchoTest
|
||||||
session.getBasicRemote().sendText("Echo");
|
session.getBasicRemote().sendText("Echo");
|
||||||
if (LOG.isDebugEnabled())
|
if (LOG.isDebugEnabled())
|
||||||
LOG.debug("Client Message Sent");
|
LOG.debug("Client Message Sent");
|
||||||
echoer.messageQueue.awaitMessages(1,1000,TimeUnit.MILLISECONDS);
|
String echoed = echoer.messages.poll(1, TimeUnit.SECONDS);
|
||||||
|
assertThat("Echoed message", echoed, is("Echo"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -146,7 +151,8 @@ public class EndpointEchoTest
|
||||||
session.getBasicRemote().sendText("Echo");
|
session.getBasicRemote().sendText("Echo");
|
||||||
if (LOG.isDebugEnabled())
|
if (LOG.isDebugEnabled())
|
||||||
LOG.debug("Client Message Sent");
|
LOG.debug("Client Message Sent");
|
||||||
// TODO: figure out echo verification.
|
EchoStringEndpoint client = (EchoStringEndpoint) session.getUserProperties().get("endpoint");
|
||||||
// echoer.messageQueue.awaitMessages(1,1000,TimeUnit.MILLISECONDS);
|
String echoed = client.messages.poll(1, TimeUnit.SECONDS);
|
||||||
|
assertThat("Echoed message", echoed, is("Echo"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,10 @@ import org.eclipse.jetty.util.BlockingArrayQueue;
|
||||||
import org.eclipse.jetty.util.log.Log;
|
import org.eclipse.jetty.util.log.Log;
|
||||||
import org.eclipse.jetty.util.log.Logger;
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated use {@code BlockingArrayQueue<String>} instead
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public class MessageQueue extends BlockingArrayQueue<String>
|
public class MessageQueue extends BlockingArrayQueue<String>
|
||||||
{
|
{
|
||||||
private static final Logger LOG = Log.getLogger(MessageQueue.class);
|
private static final Logger LOG = Log.getLogger(MessageQueue.class);
|
||||||
|
|
|
@ -18,19 +18,29 @@
|
||||||
|
|
||||||
package org.eclipse.jetty.websocket.jsr356.samples;
|
package org.eclipse.jetty.websocket.jsr356.samples;
|
||||||
|
|
||||||
import org.eclipse.jetty.websocket.jsr356.MessageQueue;
|
import javax.websocket.EndpointConfig;
|
||||||
|
import javax.websocket.Session;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.util.BlockingArrayQueue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Legitimate structure for an Endpoint
|
* Legitimate structure for an Endpoint
|
||||||
*/
|
*/
|
||||||
public class EchoStringEndpoint extends AbstractStringEndpoint
|
public class EchoStringEndpoint extends AbstractStringEndpoint
|
||||||
{
|
{
|
||||||
public MessageQueue messageQueue = new MessageQueue();
|
public BlockingArrayQueue<String> messages = new BlockingArrayQueue<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onOpen(Session session, EndpointConfig config)
|
||||||
|
{
|
||||||
|
super.onOpen(session, config);
|
||||||
|
this.session.getUserProperties().put("endpoint", this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMessage(String message)
|
public void onMessage(String message)
|
||||||
{
|
{
|
||||||
messageQueue.offer(message);
|
this.messages.offer(message);
|
||||||
session.getAsyncRemote().sendText(message);
|
this.session.getAsyncRemote().sendText(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue