/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package javax.websocket.server; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.websocket.Decoder; import javax.websocket.Encoder; /** * This class level annotation declares that the class it decorates is a web socket endpoint that will be deployed and * made available in the URI-space of a web socket server. The annotation allows the developer to define the URL (or URI * template) which this endpoint will be published, and other important properties of the endpoint to the websocket * runtime, such as the encoders it uses to send messages. * <p/> * The annotated class must have a public no-arg constructor. * <p/> * For example: * </p> * <code> * * @ServerEndpoint("/hello"); public class HelloServer { * * @OnMessage public void processGreeting(String message, Session session) { System.out.println("Greeting received:" + * message); } * * } </code> * */ @Retention(value = RetentionPolicy.RUNTIME) @Target(value = ElementType.TYPE) public @interface ServerEndpoint { /** * The URI or URI-template, level-1 (See RFC 6570) where the endpoint will be deployed. The URI us relative to the * root of the web socket container and must begin with a leading "/". Trailing "/"'s are ignored. Examples: * <p/> * <code> * * @ServerEndpoint("/chat") * @ServerEndpoint("/chat/{user ") * @ServerEndpoint("/booking/{privilege-level ") </code> * * @return the URI or URI-template */ public String value(); /** * The ordered array of web socket protocols this endpoint supports. For example, {"superchat", "chat"}. * * @return the subprotocols. */ public String[] subprotocols() default {}; /** * The ordered array of decoder classes this endpoint will use. For example, if the developer has provided a * MysteryObject decoder, this endpoint will be able to receive MysteryObjects as web socket messages. The websocket * runtime will use the first decoder in the list able to decode a message, ignoring the remaining decoders. * * @return the decoders. */ public Class<? extends Decoder>[] decoders() default {}; /** * The ordered array of encoder classes this endpoint will use. For example, if the developer has provided a * MysteryObject encoder, this class will be able to send web socket messages in the form of MysteryObjects. The * websocket runtime will use the first encoder in the list able to encode a message, ignoring the remaining * encoders. * * @return the encoders. */ public Class<? extends Encoder>[] encoders() default {}; /** * The optional custom configurator class that the developer would like to use to further configure new instances of * this endpoint. If no configurator class is provided, the implementation uses its own. The implementation creates * a new instance of the configurator per logical endpoint. * * @return the custom configuration class, or ServerEndpointConfig.Configurator.class if none was set in the * annotation. */ public Class<? extends ServerEndpointConfig.Configurator> configurator() default ServerEndpointConfig.Configurator.class; }