Author: markt Date: Thu Dec 27 20:41:08 2012 New Revision: 1426309 URL: http://svn.apache.org/viewvc?rev=1426309&view=rev Log: Fill in some Javadoc. Rename various fields/methods/parameters for consistency Remove unnecessary code
Added: tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpoint.java - copied, changed from r1426301, tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java Removed: tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java Modified: tomcat/trunk/java/javax/websocket/MessageHandler.java tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncBase.java tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncBinary.java tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncString.java tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBase.java tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicBase.java tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicBinary.java tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicPong.java tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicString.java tomcat/trunk/java/org/apache/tomcat/websocket/PojoMethodMapping.java tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java tomcat/trunk/java/org/apache/tomcat/websocket/Util.java tomcat/trunk/test/org/apache/tomcat/websocket/TestUtil.java Modified: tomcat/trunk/java/javax/websocket/MessageHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/MessageHandler.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/java/javax/websocket/MessageHandler.java (original) +++ tomcat/trunk/java/javax/websocket/MessageHandler.java Thu Dec 27 20:41:08 2012 @@ -20,11 +20,23 @@ public interface MessageHandler { interface Async<T> extends MessageHandler { + /** + * Called when part of a message is available to be processed. + * + * @param messagePart The message part + * @param last <code>true</code> if this is the last part of + * this message, else <code>false</code> + */ void onMessage(T messagePart, boolean last); } interface Basic<T> extends MessageHandler { + /** + * Called when a whole message is available to be processed. + * + * @param messagePart The message + */ void onMessage(T message); } } Copied: tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpoint.java (from r1426301, tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java) URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpoint.java?p2=tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpoint.java&p1=tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java&r1=1426301&r2=1426309&rev=1426309&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpoint.java Thu Dec 27 20:41:08 2012 @@ -30,7 +30,7 @@ import javax.websocket.Session; * {@link javax.websocket.server.WebSocketEndpoint} so they appear as standard * {@link Endpoint} instances. */ -public class WsEndpointPojo extends Endpoint { +public class PojoEndpoint extends Endpoint { private Object pojo; private String pathInfo; @@ -43,7 +43,7 @@ public class WsEndpointPojo extends Endp PojoEndpointConfiguration pec = (PojoEndpointConfiguration) endpointConfiguration; - pojo = pec.getPojo(); + pojo = pec.createPojo(); pathInfo = pec.getPathInfo(); methodMapping = pec.getMethodMapping(); Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java Thu Dec 27 20:41:08 2012 @@ -20,7 +20,7 @@ import javax.websocket.server.DefaultSer /** * Provides the configuration for POJOs annotated at WebSocket endpoints. It - * provides the means, via casting, of new {@link WsEndpointPojo} instances + * provides the means, via casting, of new {@link PojoEndpoint} instances * obtaining POJO endpoint specific configuration settings such as the mapping * of onXxx calls to POJO methods. */ @@ -28,28 +28,19 @@ public class PojoEndpointConfiguration e private final Class<?> pojoClass; private final PojoMethodMapping methodMapping; - private final String servletPath; private final String pathInfo; PojoEndpointConfiguration(Class<?> pojoClass, - PojoMethodMapping methodMapping, String servletPath, - String pathInfo) { - super(WsEndpointPojo.class, methodMapping.getMappingPath()); + PojoMethodMapping methodMapping, String pathInfo) { + super(PojoEndpoint.class, methodMapping.getWsPath()); this.pojoClass = pojoClass; this.methodMapping = methodMapping; - this.servletPath = servletPath; this.pathInfo = pathInfo; } - @Override - public String getPath() { - return servletPath; - } - - - public Object getPojo() { + public Object createPojo() { try { return pojoClass.newInstance(); } catch (InstantiationException | IllegalAccessException e) { Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncBase.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncBase.java Thu Dec 27 20:41:08 2012 @@ -23,6 +23,12 @@ import java.nio.ByteBuffer; import javax.websocket.MessageHandler; import javax.websocket.Session; +/** + * Common implementation code for the POJO asynchronous message handlers. All + * the real work is done in this class and in the superclass. + * + * @param <T> The type of message to handle + */ public abstract class PojoMessageHandlerAsyncBase<T> extends PojoMessageHandlerBase<T> implements MessageHandler.Async<T> { @@ -38,7 +44,7 @@ public abstract class PojoMessageHandler @Override - public void onMessage(T message, boolean last) { + public final void onMessage(T message, boolean last) { Object[] parameters = params.clone(); if (indexBoolean != -1) { parameters[indexBoolean] = Boolean.valueOf(last); Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncBinary.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncBinary.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncBinary.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncBinary.java Thu Dec 27 20:41:08 2012 @@ -21,7 +21,9 @@ import java.nio.ByteBuffer; import javax.websocket.Session; - +/** + * ByteBuffer specific concrete asynchronous implementation. + */ public class PojoMessageHandlerAsyncBinary extends PojoMessageHandlerAsyncBase<ByteBuffer>{ Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncString.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncString.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncString.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncString.java Thu Dec 27 20:41:08 2012 @@ -20,7 +20,9 @@ import java.lang.reflect.Method; import javax.websocket.Session; - +/** + * String specific concrete asynchronous implementation. + */ public class PojoMessageHandlerAsyncString extends PojoMessageHandlerAsyncBase<String>{ Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBase.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBase.java Thu Dec 27 20:41:08 2012 @@ -24,6 +24,11 @@ import javax.websocket.EncodeException; import javax.websocket.RemoteEndpoint; import javax.websocket.Session; +/** + * Common implementation code for the POJO message handlers. + * + * @param <T> The type of message to handle + */ public abstract class PojoMessageHandlerBase<T> { protected final Object pojo; @@ -48,7 +53,7 @@ public abstract class PojoMessageHandler } - protected void processResult(Object result) { + protected final void processResult(Object result) { if (result == null) { return; } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicBase.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicBase.java Thu Dec 27 20:41:08 2012 @@ -23,6 +23,12 @@ import java.nio.ByteBuffer; import javax.websocket.MessageHandler; import javax.websocket.Session; +/** + * Common implementation code for the POJO basic message handlers. All the real + * work is done in this class and in the superclass. + * + * @param <T> The type of message to handle + */ public abstract class PojoMessageHandlerBasicBase<T> extends PojoMessageHandlerBase<T> implements MessageHandler.Basic<T> { @@ -35,7 +41,7 @@ public abstract class PojoMessageHandler @Override - public void onMessage(T message) { + public final void onMessage(T message) { Object[] parameters = params.clone(); if (indexSession != -1) { parameters[indexSession] = session; Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicBinary.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicBinary.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicBinary.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicBinary.java Thu Dec 27 20:41:08 2012 @@ -21,6 +21,9 @@ import java.nio.ByteBuffer; import javax.websocket.Session; +/** + * ByteBuffer specific concrete basic implementation. + */ public class PojoMessageHandlerBasicBinary extends PojoMessageHandlerBasicBase<ByteBuffer> { Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicPong.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicPong.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicPong.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicPong.java Thu Dec 27 20:41:08 2012 @@ -21,6 +21,9 @@ import java.lang.reflect.Method; import javax.websocket.PongMessage; import javax.websocket.Session; +/** + * PongMessage specific concrete basic implementation. + */ public class PojoMessageHandlerBasicPong extends PojoMessageHandlerBasicBase<PongMessage> { Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicString.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicString.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicString.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicString.java Thu Dec 27 20:41:08 2012 @@ -20,6 +20,9 @@ import java.lang.reflect.Method; import javax.websocket.Session; +/** + * String specific concrete basic implementation. + */ public class PojoMessageHandlerBasicString extends PojoMessageHandlerBasicBase<String> { Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PojoMethodMapping.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoMethodMapping.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/PojoMethodMapping.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoMethodMapping.java Thu Dec 27 20:41:08 2012 @@ -48,17 +48,18 @@ public class PojoMethodMapping { private final PathParam[] onCloseParams; private final PathParam[] onErrorParams; private final Set<MessageMethod> onMessage = new HashSet<>(); - private final String mappingPath; + private final String wsPath; private final UriTemplate template; - public PojoMethodMapping(Class<?> clazzPojo, String path, String mappingPath) { - this.mappingPath = mappingPath; + public PojoMethodMapping(Class<?> clazzPojo, String wsPath, + String servletPath) { + this.wsPath = wsPath; Method open = null; Method close = null; Method error = null; - if (path.length() > mappingPath.length()) { - template = new UriTemplate(path.substring(mappingPath.length() - 2)); + if (wsPath.length() > servletPath.length()) { + template = new UriTemplate(wsPath.substring(servletPath.length() - 2)); } else { template = null; } @@ -85,8 +86,8 @@ public class PojoMethodMapping { } - public String getMappingPath() { - return mappingPath; + public String getWsPath() { + return wsPath; } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java Thu Dec 27 20:41:08 2012 @@ -40,9 +40,11 @@ public class ServerContainerImpl extends // Needs to be a WeakHashMap to prevent memory leaks when a context is // stopped - private static Map<ClassLoader,ServerContainerImpl> classLoaderContainerMap = new WeakHashMap<>(); + private static Map<ClassLoader,ServerContainerImpl> classLoaderContainerMap = + new WeakHashMap<>(); private static Object classLoaderContainerMapLock = new Object(); - private static StringManager sm = StringManager.getManager(Constants.PACKAGE_NAME); + private static StringManager sm = + StringManager.getManager(Constants.PACKAGE_NAME); protected Log log = LogFactory.getLog(ServerContainerImpl.class); @@ -59,9 +61,11 @@ public class ServerContainerImpl extends return result; } private volatile ServletContext servletContext = null; - private Map<String,ServerEndpointConfiguration> configMap = new ConcurrentHashMap<>(); + private Map<String,ServerEndpointConfiguration> configMap = + new ConcurrentHashMap<>(); private Map<String,Class<?>> pojoMap = new ConcurrentHashMap<>(); - private Map<Class<?>,PojoMethodMapping> pojoMethodMap = new ConcurrentHashMap<>(); + private Map<Class<?>,PojoMethodMapping> pojoMethodMap = + new ConcurrentHashMap<>(); private volatile int readBufferSize = 8192; @@ -75,6 +79,17 @@ public class ServerContainerImpl extends } + /** + * Published the provided endpoint implementation at the specified path with + * the specified configuration. {@link #setServletContext(ServletContext)} + * must be called before calling this method. + * + * @param endpointClass The WebSocket server implementation to publish + * @param path The path to publish the implementation at + * @param configClass The configuration to use when creating endpoint + * instances + * @throws DeploymentException + */ public void publishServer(Class<? extends Endpoint> endpointClass, String path, Class<? extends ServerEndpointConfiguration> configClass) @@ -94,13 +109,14 @@ public class ServerContainerImpl extends throw new DeploymentException(sm.getString("sci.newInstance.fail", endpointClass.getName()), e); } - String mappingPath = Util.getServletMappingPath(path); + String servletPath = Util.getServletPath(path); if (log.isDebugEnabled()) { log.debug(sm.getString("serverContainer.endpointDeploy", - endpointClass.getName(), path, servletContext.getContextPath())); + endpointClass.getName(), path, + servletContext.getContextPath())); } - configMap.put(mappingPath.substring(0, mappingPath.length() - 2), sec); - addWsServletMapping(mappingPath); + configMap.put(servletPath.substring(0, servletPath.length() - 2), sec); + addWsServletMapping(servletPath); } @@ -109,11 +125,12 @@ public class ServerContainerImpl extends * publishing plain old java objects (POJOs) that have been annotated as * WebSocket endpoints. * - * @param pojo The annotated POJO - * @param ctxt The ServletContext the endpoint is to be published in - * @param path The path at which the endpoint is to be published + * @param pojo The annotated POJO + * @param ctxt The ServletContext the endpoint is to be published in + * @param wsPath The path at which the endpoint is to be published */ - public void publishServer(Class<?> pojo, ServletContext ctxt, String path) { + public void publishServer(Class<?> pojo, ServletContext ctxt, + String wsPath) { if (ctxt == null) { throw new IllegalArgumentException( sm.getString("serverContainer.servletContextMissing")); @@ -124,27 +141,30 @@ public class ServerContainerImpl extends } else if (ctxt != servletContext) { // Should never happen throw new IllegalStateException(sm.getString( - "serverContainer.servletContextMismatch", path, + "serverContainer.servletContextMismatch", wsPath, servletContext.getContextPath(), ctxt.getContextPath())); } if (log.isDebugEnabled()) { log.debug(sm.getString("serverContainer.pojoDeploy", - pojo.getName(), path, servletContext.getContextPath())); + pojo.getName(), wsPath, servletContext.getContextPath())); } - String mappingPath = Util.getServletMappingPath(path); - pojoMap.put(mappingPath.substring(0, mappingPath.length() - 2), pojo); - pojoMethodMap.put(pojo, new PojoMethodMapping(pojo, path, mappingPath)); - addWsServletMapping(mappingPath); + String servletPath = Util.getServletPath(wsPath); + // Remove the trailing /* before adding it to the map + pojoMap.put(servletPath.substring(0, servletPath.length() - 2), pojo); + pojoMethodMap.put(pojo, + new PojoMethodMapping(pojo, wsPath, servletPath)); + addWsServletMapping(servletPath); } - private void addWsServletMapping(String mapping) { - ServletRegistration sr = servletContext.getServletRegistration(Constants.SERVLET_NAME); + private void addWsServletMapping(String servletPath) { + ServletRegistration sr = + servletContext.getServletRegistration(Constants.SERVLET_NAME); if (sr == null) { sr = servletContext.addServlet(Constants.SERVLET_NAME, WsServlet.class); } - sr.addMapping(mapping); + sr.addMapping(servletPath); } @@ -156,10 +176,11 @@ public class ServerContainerImpl extends } Class<?> pojo = pojoMap.get(servletPath); if (pojo != null) { - PojoMethodMapping mapping = pojoMethodMap.get(pojo); - if (mapping != null) { - PojoEndpointConfiguration pojoSec = new PojoEndpointConfiguration( - pojo, mapping, servletPath, pathInfo); + PojoMethodMapping methodMapping = pojoMethodMap.get(pojo); + if (methodMapping != null) { + PojoEndpointConfiguration pojoSec = + new PojoEndpointConfiguration(pojo, methodMapping, + pathInfo); return pojoSec; } } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/Util.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/Util.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/Util.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/Util.java Thu Dec 27 20:41:08 2012 @@ -37,7 +37,7 @@ class Util { * @param wsPath The WebSocket endpoint path to convert * @return The servlet mapping */ - static String getServletMappingPath(String wsPath) { + static String getServletPath(String wsPath) { int templateStart = wsPath.indexOf('{'); if (templateStart == -1) { if (wsPath.charAt(wsPath.length() - 1) == '/') { Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TestUtil.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestUtil.java?rev=1426309&r1=1426308&r2=1426309&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/tomcat/websocket/TestUtil.java (original) +++ tomcat/trunk/test/org/apache/tomcat/websocket/TestUtil.java Thu Dec 27 20:41:08 2012 @@ -24,20 +24,20 @@ public class TestUtil { @Test public void testGetServletMappingPath() throws Exception { Assert.assertEquals("/foo/*", - Util.getServletMappingPath("/foo")); + Util.getServletPath("/foo")); Assert.assertEquals("/foo/*", - Util.getServletMappingPath("/foo/")); + Util.getServletPath("/foo/")); Assert.assertEquals("/foo/bar/*", - Util.getServletMappingPath("/foo/bar")); + Util.getServletPath("/foo/bar")); Assert.assertEquals("/foo/bar/*", - Util.getServletMappingPath("/foo/bar/")); + Util.getServletPath("/foo/bar/")); Assert.assertEquals("/foo/*", - Util.getServletMappingPath("/foo/{bar}")); + Util.getServletPath("/foo/{bar}")); Assert.assertEquals("/foo/*", - Util.getServletMappingPath("/foo/{bar}/")); + Util.getServletPath("/foo/{bar}/")); Assert.assertEquals("/foo/*", - Util.getServletMappingPath("/foo/x{bar}")); + Util.getServletPath("/foo/x{bar}")); Assert.assertEquals("/foo/*", - Util.getServletMappingPath("/foo/x{bar}/")); + Util.getServletPath("/foo/x{bar}/")); } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org