diff --git a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/endpoints/JsrAnnotatedEventDriver.java b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/endpoints/JsrAnnotatedEventDriver.java index 86743455c19..5377521a3b9 100644 --- a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/endpoints/JsrAnnotatedEventDriver.java +++ b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/endpoints/JsrAnnotatedEventDriver.java @@ -40,6 +40,8 @@ import org.eclipse.jetty.websocket.common.message.SimpleBinaryMessage; import org.eclipse.jetty.websocket.common.message.SimpleTextMessage; import org.eclipse.jetty.websocket.jsr356.JsrSession; import org.eclipse.jetty.websocket.jsr356.annotations.JsrEvents; +import org.eclipse.jetty.websocket.jsr356.messages.BinaryPartialOnMessage; +import org.eclipse.jetty.websocket.jsr356.messages.TextPartialOnMessage; /** * Base implementation for JSR-356 Annotated event drivers. @@ -78,25 +80,17 @@ public class JsrAnnotatedEventDriver extends AbstractJsrEventDriver implements E if (events.hasBinary()) { handled = true; - if (events.isBinaryPartialSupported()) + if (activeMessage == null) { - LOG.debug("Partial Binary Message: fin={}",fin); - // Partial Message Support (does not use messageAppender) - try + if (events.isBinaryPartialSupported()) { - events.callBinary(jsrsession.getAsyncRemote(),websocket,buffer,fin); + // Partial Message Support (does not use messageAppender) + LOG.debug("Partial Binary Message: fin={}",fin); + activeMessage = new BinaryPartialOnMessage(this); } - catch (DecodeException e) - { - onFatalError(e); - } - return; - } - else - { - // Whole Message Support - if (activeMessage == null) + else { + // Whole Message Support LOG.debug("Whole Binary Message"); activeMessage = new SimpleBinaryMessage(this); } @@ -191,7 +185,6 @@ public class JsrAnnotatedEventDriver extends AbstractJsrEventDriver implements E private void onFatalError(Throwable t) { onError(t); - // TODO: close connection? } @Override @@ -213,6 +206,30 @@ public class JsrAnnotatedEventDriver extends AbstractJsrEventDriver implements E } } + public void onPartialBinaryMessage(ByteBuffer buffer, boolean fin) + { + try + { + events.callBinary(jsrsession.getAsyncRemote(),websocket,buffer,fin); + } + catch (DecodeException e) + { + onFatalError(e); + } + } + + public void onPartialTextMessage(String message, boolean fin) + { + try + { + events.callText(jsrsession.getAsyncRemote(),websocket,message,fin); + } + catch (DecodeException e) + { + onFatalError(e); + } + } + @Override public void onPong(ByteBuffer buffer) { @@ -257,26 +274,17 @@ public class JsrAnnotatedEventDriver extends AbstractJsrEventDriver implements E if (events.hasText()) { handled = true; - if (events.isTextPartialSupported()) + if (activeMessage == null) { - LOG.debug("Partial Text Message: fin={}",fin); - // Partial Message Support (does not use messageAppender) - try + if (events.isTextPartialSupported()) { - String text = BufferUtil.toUTF8String(buffer); - events.callText(jsrsession.getAsyncRemote(),websocket,text,fin); + // Partial Message Support + LOG.debug("Partial Text Message: fin={}",fin); + activeMessage = new TextPartialOnMessage(this); } - catch (DecodeException e) - { - onFatalError(e); - } - return; - } - else - { - // Whole Message Support - if (activeMessage == null) + else { + // Whole Message Support LOG.debug("Whole Text Message"); activeMessage = new SimpleTextMessage(this); } diff --git a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/BinaryPartialMessage.java b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/BinaryPartialMessage.java index 3255343f40a..db98eca21f9 100644 --- a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/BinaryPartialMessage.java +++ b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/BinaryPartialMessage.java @@ -28,6 +28,9 @@ import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.websocket.common.message.MessageAppender; import org.eclipse.jetty.websocket.jsr356.MessageHandlerWrapper; +/** + * Partial BINARY MessageAppender for MessageHandler.Partial interface + */ public class BinaryPartialMessage implements MessageAppender { private final MessageHandlerWrapper msgWrapper; diff --git a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/BinaryPartialOnMessage.java b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/BinaryPartialOnMessage.java new file mode 100644 index 00000000000..21c60a58502 --- /dev/null +++ b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/BinaryPartialOnMessage.java @@ -0,0 +1,66 @@ +// +// ======================================================================== +// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.websocket.jsr356.messages; + +import java.io.IOException; +import java.nio.ByteBuffer; + +import javax.websocket.OnMessage; + +import org.eclipse.jetty.util.BufferUtil; +import org.eclipse.jetty.websocket.common.message.MessageAppender; +import org.eclipse.jetty.websocket.jsr356.endpoints.JsrAnnotatedEventDriver; + +/** + * Partial BINARY MessageAppender for @{@link OnMessage} annotated methods + */ +public class BinaryPartialOnMessage implements MessageAppender +{ + private final JsrAnnotatedEventDriver driver; + private boolean finished; + + public BinaryPartialOnMessage(JsrAnnotatedEventDriver driver) + { + this.driver = driver; + this.finished = false; + } + + @Override + public void appendMessage(ByteBuffer payload, boolean isLast) throws IOException + { + if (finished) + { + throw new IOException("Cannot append to finished buffer"); + } + if (payload == null) + { + driver.onPartialBinaryMessage(BufferUtil.EMPTY_BUFFER,isLast); + } + else + { + driver.onPartialBinaryMessage(payload,isLast); + } + } + + @Override + public void messageComplete() + { + finished = true; + } +} diff --git a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/TextPartialMessage.java b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/TextPartialMessage.java index 45e3cc88dc9..23934c42d3a 100644 --- a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/TextPartialMessage.java +++ b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/TextPartialMessage.java @@ -28,6 +28,9 @@ import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.websocket.common.message.MessageAppender; import org.eclipse.jetty.websocket.jsr356.MessageHandlerWrapper; +/** + * Partial TEXT MessageAppender for MessageHandler.Partial interface + */ public class TextPartialMessage implements MessageAppender { @SuppressWarnings("unused") diff --git a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/TextPartialOnMessage.java b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/TextPartialOnMessage.java new file mode 100644 index 00000000000..12b4e7b97ed --- /dev/null +++ b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/TextPartialOnMessage.java @@ -0,0 +1,67 @@ +// +// ======================================================================== +// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.websocket.jsr356.messages; + +import java.io.IOException; +import java.nio.ByteBuffer; + +import javax.websocket.OnMessage; + +import org.eclipse.jetty.util.BufferUtil; +import org.eclipse.jetty.websocket.common.message.MessageAppender; +import org.eclipse.jetty.websocket.jsr356.endpoints.JsrAnnotatedEventDriver; + +/** + * Partial TEXT MessageAppender for @{@link OnMessage} annotated methods + */ +public class TextPartialOnMessage implements MessageAppender +{ + private final JsrAnnotatedEventDriver driver; + private boolean finished; + + public TextPartialOnMessage(JsrAnnotatedEventDriver driver) + { + this.driver = driver; + this.finished = false; + } + + @Override + public void appendMessage(ByteBuffer payload, boolean isLast) throws IOException + { + if (finished) + { + throw new IOException("Cannot append to finished buffer"); + } + if (payload == null) + { + driver.onPartialTextMessage("",isLast); + } + else + { + String text = BufferUtil.toUTF8String(payload); + driver.onPartialTextMessage(text,isLast); + } + } + + @Override + public void messageComplete() + { + finished = true; + } +} diff --git a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/AnnotatedServerEndpointMetadata.java b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/AnnotatedServerEndpointMetadata.java index da9d88b01ac..e1850744ed1 100644 --- a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/AnnotatedServerEndpointMetadata.java +++ b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/AnnotatedServerEndpointMetadata.java @@ -33,7 +33,7 @@ public class AnnotatedServerEndpointMetadata extends AnnotatedEndpointMetadata websocket, ServerEndpointConfig baseConfig) throws DeploymentException + protected AnnotatedServerEndpointMetadata(Class websocket, ServerEndpointConfig baseConfig) throws DeploymentException { super(websocket); diff --git a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ServerContainer.java b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ServerContainer.java index e10026d49ff..45cfd12f32c 100644 --- a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ServerContainer.java +++ b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ServerContainer.java @@ -117,7 +117,7 @@ public class ServerContainer extends ClientContainer implements javax.websocket. if (anno != null) { // Annotated takes precedence here - AnnotatedServerEndpointMetadata ametadata = new AnnotatedServerEndpointMetadata(this,endpoint,config); + AnnotatedServerEndpointMetadata ametadata = new AnnotatedServerEndpointMetadata(endpoint,config); AnnotatedEndpointScanner scanner = new AnnotatedEndpointScanner<>(ametadata); metadata = ametadata; scanner.scan(); diff --git a/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/DummyConnection.java b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/DummyConnection.java new file mode 100644 index 00000000000..86034cc8077 --- /dev/null +++ b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/DummyConnection.java @@ -0,0 +1,160 @@ +// +// ======================================================================== +// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.websocket.jsr356.server; + +import java.net.InetSocketAddress; +import java.util.concurrent.Executor; + +import org.eclipse.jetty.io.ByteBufferPool; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; +import org.eclipse.jetty.websocket.api.SuspendToken; +import org.eclipse.jetty.websocket.api.WebSocketPolicy; +import org.eclipse.jetty.websocket.api.WriteCallback; +import org.eclipse.jetty.websocket.api.extensions.Frame; +import org.eclipse.jetty.websocket.api.extensions.IncomingFrames; +import org.eclipse.jetty.websocket.common.LogicalConnection; +import org.eclipse.jetty.websocket.common.WebSocketSession; +import org.eclipse.jetty.websocket.common.io.IOState; + +public class DummyConnection implements LogicalConnection +{ + private static final Logger LOG = Log.getLogger(DummyConnection.class); + private IOState iostate; + + public DummyConnection() + { + this.iostate = new IOState(); + } + + @Override + public void close() + { + } + + @Override + public void close(int statusCode, String reason) + { + } + + @Override + public void disconnect() + { + } + + @Override + public ByteBufferPool getBufferPool() + { + return null; + } + + @Override + public Executor getExecutor() + { + return null; + } + + @Override + public long getIdleTimeout() + { + return 0; + } + + @Override + public IOState getIOState() + { + return this.iostate; + } + + @Override + public InetSocketAddress getLocalAddress() + { + return null; + } + + @Override + public long getMaxIdleTimeout() + { + return 0; + } + + @Override + public WebSocketPolicy getPolicy() + { + return null; + } + + @Override + public InetSocketAddress getRemoteAddress() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public WebSocketSession getSession() + { + return null; + } + + @Override + public boolean isOpen() + { + return false; + } + + @Override + public boolean isReading() + { + return false; + } + + @Override + public void outgoingFrame(Frame frame, WriteCallback callback) + { + callback.writeSuccess(); + } + + @Override + public void resume() + { + } + + @Override + public void setMaxIdleTimeout(long ms) + { + } + + @Override + public void setNextIncomingFrames(IncomingFrames incoming) + { + LOG.debug("setNextIncomingFrames({})",incoming); + } + + @Override + public void setSession(WebSocketSession session) + { + } + + @Override + public SuspendToken suspend() + { + return null; + } +} diff --git a/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/EchoTest.java b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/EchoTest.java index 73a57d850ce..05885637354 100644 --- a/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/EchoTest.java +++ b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/EchoTest.java @@ -186,14 +186,12 @@ public class EchoTest .expect("Hello World|OhMy"); // Partial message based - /* EchoCase.add(TESTCASES,PartialTextSocket.class) .addSplitMessage("Saved"," by ","zero") .expect("('Saved',false)(' by ',false)('zero',true)"); EchoCase.add(TESTCASES,PartialTextSessionSocket.class) .addSplitMessage("Built"," for"," the"," future") .expect("('Built',false)(' for',false)(' the',false)(' future',true)"); - */ } @BeforeClass diff --git a/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/OnPartialTest.java b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/OnPartialTest.java new file mode 100644 index 00000000000..025d466adc1 --- /dev/null +++ b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/OnPartialTest.java @@ -0,0 +1,111 @@ +// +// ======================================================================== +// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.websocket.jsr356.server; + +import static org.hamcrest.Matchers.*; + +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + +import javax.websocket.server.ServerEndpoint; +import javax.websocket.server.ServerEndpointConfig; + +import org.eclipse.jetty.websocket.api.WebSocketPolicy; +import org.eclipse.jetty.websocket.common.WebSocketFrame; +import org.eclipse.jetty.websocket.common.events.EventDriver; +import org.eclipse.jetty.websocket.common.events.EventDriverFactory; +import org.eclipse.jetty.websocket.common.events.EventDriverImpl; +import org.eclipse.jetty.websocket.common.frames.ContinuationFrame; +import org.eclipse.jetty.websocket.common.frames.TextFrame; +import org.eclipse.jetty.websocket.jsr356.ClientContainer; +import org.eclipse.jetty.websocket.jsr356.JsrSession; +import org.eclipse.jetty.websocket.jsr356.annotations.AnnotatedEndpointScanner; +import org.eclipse.jetty.websocket.jsr356.endpoints.EndpointInstance; +import org.eclipse.jetty.websocket.jsr356.server.samples.partial.PartialTrackingSocket; +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestName; + +public class OnPartialTest +{ + @Rule + public TestName testname = new TestName(); + + public EventDriver toEventDriver(Object websocket) throws Throwable + { + WebSocketPolicy policy = WebSocketPolicy.newServerPolicy(); + policy.setInputBufferSize(1024); + policy.setMaxBinaryMessageBufferSize(1024); + policy.setMaxTextMessageBufferSize(1024); + + // Event Driver Factory + EventDriverFactory factory = new EventDriverFactory(policy); + factory.addImplementation(new JsrServerEndpointImpl()); + + // Create EventDriver + EventDriverImpl driverImpl = new JsrServerEndpointImpl(); + Class endpoint = websocket.getClass(); + ServerEndpoint anno = endpoint.getAnnotation(ServerEndpoint.class); + Assert.assertThat("Endpoint: " + endpoint + " should be annotated with @ServerEndpoint",anno,notNullValue()); + ServerEndpointConfig config = new BasicServerEndpointConfig(endpoint,"/"); + AnnotatedServerEndpointMetadata metadata = new AnnotatedServerEndpointMetadata(endpoint,config); + AnnotatedEndpointScanner scanner = new AnnotatedEndpointScanner<>(metadata); + scanner.scan(); + EndpointInstance ei = new EndpointInstance(websocket,config,metadata); + EventDriver driver = driverImpl.create(ei,policy); + Assert.assertThat("EventDriver",driver,notNullValue()); + + // Create Local JsrSession + String id = testname.getMethodName(); + URI requestURI = URI.create("ws://localhost/" + id); + DummyConnection connection = new DummyConnection(); + ClientContainer container = new ClientContainer(); + @SuppressWarnings("resource") + JsrSession session = new JsrSession(requestURI,driver,connection,container,id); + session.setPolicy(policy); + session.open(); + return driver; + } + + @Test + public void testOnTextPartial() throws Throwable + { + List frames = new ArrayList<>(); + frames.add(new TextFrame("Saved").setFin(false)); + frames.add(new ContinuationFrame(" by ").setFin(false)); + frames.add(new ContinuationFrame("zero").setFin(true)); + + PartialTrackingSocket socket = new PartialTrackingSocket(); + + EventDriver driver = toEventDriver(socket); + driver.onConnect(); + + for (WebSocketFrame frame : frames) + { + driver.incomingFrame(frame); + } + + Assert.assertThat("Captured Event Queue size",socket.eventQueue.size(),is(3)); + Assert.assertThat("Event[0]",socket.eventQueue.poll(),is("onPartial(\"Saved\",false)")); + Assert.assertThat("Event[1]",socket.eventQueue.poll(),is("onPartial(\" by \",false)")); + Assert.assertThat("Event[2]",socket.eventQueue.poll(),is("onPartial(\"zero\",true)")); + } +} diff --git a/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/ServerAnnotatedEndpointScanner_GoodSignaturesTest.java b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/ServerAnnotatedEndpointScanner_GoodSignaturesTest.java index a012b9b1176..4a29554b2ea 100644 --- a/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/ServerAnnotatedEndpointScanner_GoodSignaturesTest.java +++ b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/ServerAnnotatedEndpointScanner_GoodSignaturesTest.java @@ -68,7 +68,6 @@ import org.eclipse.jetty.websocket.jsr356.server.samples.primitives.ShortObjectT import org.eclipse.jetty.websocket.jsr356.server.samples.primitives.ShortTextSocket; import org.eclipse.jetty.websocket.jsr356.server.samples.streaming.ReaderParamSocket; import org.eclipse.jetty.websocket.jsr356.server.samples.streaming.StringReturnReaderParamSocket; -import org.eclipse.jetty.websocket.server.WebSocketServerFactory; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -104,8 +103,6 @@ public class ServerAnnotatedEndpointScanner_GoodSignaturesTest } } - private static ServerContainer container = new ServerContainer(new DummyCreator(), new WebSocketServerFactory()); - @Parameters public static Collection data() throws Exception { @@ -185,7 +182,7 @@ public class ServerAnnotatedEndpointScanner_GoodSignaturesTest @Test public void testScan_Basic() throws Exception { - AnnotatedServerEndpointMetadata metadata = new AnnotatedServerEndpointMetadata(container,testcase.pojo,null); + AnnotatedServerEndpointMetadata metadata = new AnnotatedServerEndpointMetadata(testcase.pojo,null); AnnotatedEndpointScanner scanner = new AnnotatedEndpointScanner<>(metadata); scanner.scan(); diff --git a/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/ServerAnnotatedEndpointScanner_InvalidSignaturesTest.java b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/ServerAnnotatedEndpointScanner_InvalidSignaturesTest.java index e9fb3f3a410..144949f9d92 100644 --- a/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/ServerAnnotatedEndpointScanner_InvalidSignaturesTest.java +++ b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/ServerAnnotatedEndpointScanner_InvalidSignaturesTest.java @@ -43,7 +43,6 @@ import org.eclipse.jetty.websocket.jsr356.server.samples.InvalidErrorIntSocket; import org.eclipse.jetty.websocket.jsr356.server.samples.InvalidOpenCloseReasonSocket; import org.eclipse.jetty.websocket.jsr356.server.samples.InvalidOpenIntSocket; import org.eclipse.jetty.websocket.jsr356.server.samples.InvalidOpenSessionIntSocket; -import org.eclipse.jetty.websocket.server.WebSocketServerFactory; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -58,8 +57,6 @@ public class ServerAnnotatedEndpointScanner_InvalidSignaturesTest { private static final Logger LOG = Log.getLogger(ServerAnnotatedEndpointScanner_InvalidSignaturesTest.class); - private static ServerContainer container = new ServerContainer(new DummyCreator(), new WebSocketServerFactory()); - @Parameters public static Collection[]> data() { @@ -97,7 +94,7 @@ public class ServerAnnotatedEndpointScanner_InvalidSignaturesTest @Test public void testScan_InvalidSignature() throws DeploymentException { - AnnotatedServerEndpointMetadata metadata = new AnnotatedServerEndpointMetadata(container,pojo,null); + AnnotatedServerEndpointMetadata metadata = new AnnotatedServerEndpointMetadata(pojo,null); AnnotatedEndpointScanner scanner = new AnnotatedEndpointScanner<>(metadata); try diff --git a/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/samples/partial/PartialTrackingSocket.java b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/samples/partial/PartialTrackingSocket.java new file mode 100644 index 00000000000..475b59da614 --- /dev/null +++ b/jetty-websocket/javax-websocket-server-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/server/samples/partial/PartialTrackingSocket.java @@ -0,0 +1,36 @@ +// +// ======================================================================== +// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.websocket.jsr356.server.samples.partial; + +import java.io.IOException; + +import javax.websocket.OnMessage; +import javax.websocket.server.ServerEndpoint; + +import org.eclipse.jetty.websocket.jsr356.server.TrackingSocket; + +@ServerEndpoint("/echo/partial/tracking") +public class PartialTrackingSocket extends TrackingSocket +{ + @OnMessage + public void onPartial(String msg, boolean fin) throws IOException + { + addEvent("onPartial(\"%s\",%b)",msg,fin); + } +} diff --git a/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/WebSocketClient.java b/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/WebSocketClient.java index 378db93964b..83604efa45d 100644 --- a/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/WebSocketClient.java +++ b/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/WebSocketClient.java @@ -50,7 +50,6 @@ import org.eclipse.jetty.websocket.client.io.ConnectionManager; import org.eclipse.jetty.websocket.client.io.UpgradeListener; import org.eclipse.jetty.websocket.client.masks.Masker; import org.eclipse.jetty.websocket.client.masks.RandomMasker; -import org.eclipse.jetty.websocket.client.masks.ZeroMasker; import org.eclipse.jetty.websocket.common.SessionFactory; import org.eclipse.jetty.websocket.common.WebSocketSessionFactory; import org.eclipse.jetty.websocket.common.events.EventDriver; @@ -89,12 +88,7 @@ public class WebSocketClient extends ContainerLifeCycle this.policy = WebSocketPolicy.newClientPolicy(); this.bufferPool = new MappedByteBufferPool(); this.extensionRegistry = new WebSocketExtensionFactory(policy,bufferPool); - if(LOG.isDebugEnabled()) { - LOG.debug("Using ZeroMasker (DEBUG)"); - this.masker = new ZeroMasker(); - } else { - this.masker = new RandomMasker(); - } + this.masker = new RandomMasker(); this.eventDriverFactory = new EventDriverFactory(policy); this.sessionFactory = new WebSocketSessionFactory(); }