Search in sources :

Example 6 with ServerEndpoint

use of javax.websocket.server.ServerEndpoint in project jetty.project by eclipse.

the class JsrServerEndpointImpl method supports.

@Override
public boolean supports(Object websocket) {
    if (!(websocket instanceof EndpointInstance)) {
        return false;
    }
    EndpointInstance ei = (EndpointInstance) websocket;
    Object endpoint = ei.getEndpoint();
    ServerEndpoint anno = endpoint.getClass().getAnnotation(ServerEndpoint.class);
    return (anno != null);
}
Also used : EndpointInstance(org.eclipse.jetty.websocket.jsr356.endpoints.EndpointInstance) ServerEndpoint(javax.websocket.server.ServerEndpoint)

Example 7 with ServerEndpoint

use of javax.websocket.server.ServerEndpoint in project jetty.project by eclipse.

the class OnPartialTest method toEventDriver.

public EventDriver toEventDriver(Object websocket) throws Throwable {
    WebSocketPolicy policy = WebSocketPolicy.newServerPolicy();
    policy.setInputBufferSize(1024);
    policy.setMaxBinaryMessageBufferSize(1024);
    policy.setMaxTextMessageBufferSize(1024);
    // 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());
    WebSocketContainerScope containerScope = new SimpleContainerScope(policy);
    // Event Driver Factory
    EventDriverFactory factory = new EventDriverFactory(containerScope);
    factory.addImplementation(new JsrServerEndpointImpl());
    ServerEndpointConfig config = new BasicServerEndpointConfig(containerScope, endpoint, "/");
    AnnotatedServerEndpointMetadata metadata = new AnnotatedServerEndpointMetadata(containerScope, endpoint, config);
    AnnotatedEndpointScanner<ServerEndpoint, ServerEndpointConfig> 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();
    container.start();
    @SuppressWarnings("resource") JsrSession session = new JsrSession(container, id, requestURI, driver, connection);
    session.setPolicy(policy);
    session.start();
    session.open();
    return driver;
}
Also used : WebSocketPolicy(org.eclipse.jetty.websocket.api.WebSocketPolicy) EventDriverFactory(org.eclipse.jetty.websocket.common.events.EventDriverFactory) ServerEndpointConfig(javax.websocket.server.ServerEndpointConfig) WebSocketContainerScope(org.eclipse.jetty.websocket.common.scopes.WebSocketContainerScope) DummyConnection(org.eclipse.jetty.websocket.common.test.DummyConnection) ClientContainer(org.eclipse.jetty.websocket.jsr356.ClientContainer) EndpointInstance(org.eclipse.jetty.websocket.jsr356.endpoints.EndpointInstance) JsrSession(org.eclipse.jetty.websocket.jsr356.JsrSession) ServerEndpoint(javax.websocket.server.ServerEndpoint) URI(java.net.URI) EventDriver(org.eclipse.jetty.websocket.common.events.EventDriver) AnnotatedEndpointScanner(org.eclipse.jetty.websocket.jsr356.annotations.AnnotatedEndpointScanner) SimpleContainerScope(org.eclipse.jetty.websocket.common.scopes.SimpleContainerScope) EventDriverImpl(org.eclipse.jetty.websocket.common.events.EventDriverImpl)

Example 8 with ServerEndpoint

use of javax.websocket.server.ServerEndpoint in project jetty.project by eclipse.

the class ServerAnnotatedEndpointScanner_GoodSignaturesTest method testScan_Basic.

@Test
public void testScan_Basic() throws Exception {
    WebSocketContainerScope container = new SimpleContainerScope(WebSocketPolicy.newClientPolicy());
    AnnotatedServerEndpointMetadata metadata = new AnnotatedServerEndpointMetadata(container, testcase.pojo, null);
    AnnotatedEndpointScanner<ServerEndpoint, ServerEndpointConfig> scanner = new AnnotatedEndpointScanner<>(metadata);
    scanner.scan();
    Assert.assertThat("Metadata", metadata, notNullValue());
    JsrCallable method = (JsrCallable) testcase.metadataField.get(metadata);
    Assert.assertThat(testcase.metadataField.toString(), method, notNullValue());
    int len = testcase.expectedParameters.length;
    for (int i = 0; i < len; i++) {
        Class<?> expectedParam = testcase.expectedParameters[i];
        Class<?> actualParam = method.getParamTypes()[i];
        Assert.assertTrue("Parameter[" + i + "] - expected:[" + expectedParam + "], actual:[" + actualParam + "]", actualParam.equals(expectedParam));
    }
}
Also used : ServerEndpointConfig(javax.websocket.server.ServerEndpointConfig) WebSocketContainerScope(org.eclipse.jetty.websocket.common.scopes.WebSocketContainerScope) JsrCallable(org.eclipse.jetty.websocket.jsr356.annotations.JsrCallable) AnnotatedEndpointScanner(org.eclipse.jetty.websocket.jsr356.annotations.AnnotatedEndpointScanner) SimpleContainerScope(org.eclipse.jetty.websocket.common.scopes.SimpleContainerScope) ServerEndpoint(javax.websocket.server.ServerEndpoint) ServerEndpoint(javax.websocket.server.ServerEndpoint) Test(org.junit.Test)

Example 9 with ServerEndpoint

use of javax.websocket.server.ServerEndpoint in project jetty.project by eclipse.

the class EchoCase method add.

public static EchoCase add(List<EchoCase[]> data, Class<?> serverPojo) {
    EchoCase ecase = new EchoCase();
    ecase.serverPojo = serverPojo;
    data.add(new EchoCase[] { ecase });
    ServerEndpoint endpoint = serverPojo.getAnnotation(ServerEndpoint.class);
    ecase.path = endpoint.value();
    return ecase;
}
Also used : ServerEndpoint(javax.websocket.server.ServerEndpoint)

Example 10 with ServerEndpoint

use of javax.websocket.server.ServerEndpoint in project undertow by undertow-io.

the class ServerWebSocketContainer method addEndpointInternal.

private synchronized void addEndpointInternal(final Class<?> endpoint, boolean requiresCreation) throws DeploymentException {
    ServerEndpoint serverEndpoint = endpoint.getAnnotation(ServerEndpoint.class);
    ClientEndpoint clientEndpoint = endpoint.getAnnotation(ClientEndpoint.class);
    if (serverEndpoint != null) {
        JsrWebSocketLogger.ROOT_LOGGER.addingAnnotatedServerEndpoint(endpoint, serverEndpoint.value());
        final PathTemplate template = PathTemplate.create(serverEndpoint.value());
        if (seenPaths.contains(template)) {
            PathTemplate existing = null;
            for (PathTemplate p : seenPaths) {
                if (p.compareTo(template) == 0) {
                    existing = p;
                    break;
                }
            }
            throw JsrWebSocketMessages.MESSAGES.multipleEndpointsWithOverlappingPaths(template, existing);
        }
        seenPaths.add(template);
        Class<? extends ServerEndpointConfig.Configurator> configuratorClass = serverEndpoint.configurator();
        EncodingFactory encodingFactory = EncodingFactory.createFactory(classIntrospecter, serverEndpoint.decoders(), serverEndpoint.encoders());
        AnnotatedEndpointFactory annotatedEndpointFactory = AnnotatedEndpointFactory.create(endpoint, encodingFactory, template.getParameterNames());
        InstanceFactory<?> instanceFactory = null;
        try {
            instanceFactory = classIntrospecter.createInstanceFactory(endpoint);
        } catch (Exception e) {
            //so it is possible that this is still valid if a custom configurator is in use
            if (configuratorClass == ServerEndpointConfig.Configurator.class) {
                throw JsrWebSocketMessages.MESSAGES.couldNotDeploy(e);
            } else {
                instanceFactory = new InstanceFactory<Object>() {

                    @Override
                    public InstanceHandle<Object> createInstance() throws InstantiationException {
                        throw JsrWebSocketMessages.MESSAGES.endpointDoesNotHaveAppropriateConstructor(endpoint);
                    }
                };
            }
        }
        ServerEndpointConfig.Configurator configurator;
        if (configuratorClass != ServerEndpointConfig.Configurator.class) {
            try {
                configurator = classIntrospecter.createInstanceFactory(configuratorClass).createInstance().getInstance();
            } catch (InstantiationException | NoSuchMethodException e) {
                throw JsrWebSocketMessages.MESSAGES.couldNotDeploy(e);
            }
        } else {
            configurator = DefaultContainerConfigurator.INSTANCE;
        }
        ServerEndpointConfig config = ServerEndpointConfig.Builder.create(endpoint, serverEndpoint.value()).decoders(Arrays.asList(serverEndpoint.decoders())).encoders(Arrays.asList(serverEndpoint.encoders())).subprotocols(Arrays.asList(serverEndpoint.subprotocols())).extensions(Collections.<Extension>emptyList()).configurator(configurator).build();
        ConfiguredServerEndpoint confguredServerEndpoint = new ConfiguredServerEndpoint(config, instanceFactory, template, encodingFactory, annotatedEndpointFactory, installedExtensions);
        configuredServerEndpoints.add(confguredServerEndpoint);
        handleAddingFilterMapping();
    } else if (clientEndpoint != null) {
        JsrWebSocketLogger.ROOT_LOGGER.addingAnnotatedClientEndpoint(endpoint);
        EncodingFactory encodingFactory = EncodingFactory.createFactory(classIntrospecter, clientEndpoint.decoders(), clientEndpoint.encoders());
        InstanceFactory<?> instanceFactory;
        try {
            instanceFactory = classIntrospecter.createInstanceFactory(endpoint);
        } catch (Exception e) {
            try {
                //this endpoint cannot be created by the container, the user will instantiate it
                instanceFactory = new ConstructorInstanceFactory<>(endpoint.getConstructor());
            } catch (NoSuchMethodException e1) {
                if (requiresCreation) {
                    throw JsrWebSocketMessages.MESSAGES.couldNotDeploy(e);
                } else {
                    instanceFactory = new InstanceFactory<Object>() {

                        @Override
                        public InstanceHandle<Object> createInstance() throws InstantiationException {
                            throw new InstantiationException();
                        }
                    };
                }
            }
        }
        AnnotatedEndpointFactory factory = AnnotatedEndpointFactory.create(endpoint, encodingFactory, Collections.<String>emptySet());
        ClientEndpointConfig.Configurator configurator = null;
        try {
            configurator = classIntrospecter.createInstanceFactory(clientEndpoint.configurator()).createInstance().getInstance();
        } catch (InstantiationException | NoSuchMethodException e) {
            throw JsrWebSocketMessages.MESSAGES.couldNotDeploy(e);
        }
        ClientEndpointConfig config = ClientEndpointConfig.Builder.create().decoders(Arrays.asList(clientEndpoint.decoders())).encoders(Arrays.asList(clientEndpoint.encoders())).preferredSubprotocols(Arrays.asList(clientEndpoint.subprotocols())).configurator(configurator).build();
        ConfiguredClientEndpoint configuredClientEndpoint = new ConfiguredClientEndpoint(config, factory, encodingFactory, instanceFactory);
        clientEndpoints.put(endpoint, configuredClientEndpoint);
    } else {
        throw JsrWebSocketMessages.MESSAGES.classWasNotAnnotated(endpoint);
    }
}
Also used : ServerEndpointConfig(javax.websocket.server.ServerEndpointConfig) PathTemplate(io.undertow.util.PathTemplate) ServerEndpoint(javax.websocket.server.ServerEndpoint) ServletException(javax.servlet.ServletException) DeploymentException(javax.websocket.DeploymentException) ClosedChannelException(java.nio.channels.ClosedChannelException) IOException(java.io.IOException) UpgradeFailedException(org.xnio.http.UpgradeFailedException) AnnotatedEndpointFactory(io.undertow.websockets.jsr.annotated.AnnotatedEndpointFactory) ConstructorInstanceFactory(io.undertow.servlet.util.ConstructorInstanceFactory) InstanceFactory(io.undertow.servlet.api.InstanceFactory) ClientEndpointConfig(javax.websocket.ClientEndpointConfig) ClientEndpoint(javax.websocket.ClientEndpoint)

Aggregations

ServerEndpoint (javax.websocket.server.ServerEndpoint)11 ServerEndpointConfig (javax.websocket.server.ServerEndpointConfig)9 DeploymentException (javax.websocket.DeploymentException)4 AnnotatedEndpointScanner (org.eclipse.jetty.websocket.jsr356.annotations.AnnotatedEndpointScanner)4 Endpoint (javax.websocket.Endpoint)3 SimpleContainerScope (org.eclipse.jetty.websocket.common.scopes.SimpleContainerScope)3 WebSocketContainerScope (org.eclipse.jetty.websocket.common.scopes.WebSocketContainerScope)3 EndpointInstance (org.eclipse.jetty.websocket.jsr356.endpoints.EndpointInstance)3 HashSet (java.util.HashSet)2 ServletException (javax.servlet.ServletException)2 ClientEndpoint (javax.websocket.ClientEndpoint)2 ServerApplicationConfig (javax.websocket.server.ServerApplicationConfig)2 Test (org.junit.Test)2 InstanceFactory (io.undertow.servlet.api.InstanceFactory)1 ConstructorInstanceFactory (io.undertow.servlet.util.ConstructorInstanceFactory)1 PathTemplate (io.undertow.util.PathTemplate)1 AnnotatedEndpointFactory (io.undertow.websockets.jsr.annotated.AnnotatedEndpointFactory)1 IOException (java.io.IOException)1 URI (java.net.URI)1 ClosedChannelException (java.nio.channels.ClosedChannelException)1