Author: markt
Date: Thu Jun 20 22:24:25 2013
New Revision: 1495216

URL: http://svn.apache.org/r1495216
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55120
@OnOpen needs to support an optional EndpointConfig parameter.
Based on a patch by Niki Dokovski.

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java
    tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java
    tomcat/trunk/test/org/apache/tomcat/websocket/pojo/TestPojoEndpointBase.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java?rev=1495216&r1=1495215&r2=1495216&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java 
Thu Jun 20 22:24:25 2013
@@ -56,7 +56,8 @@ public abstract class PojoEndpointBase e
         if (methodMapping.getOnOpen() != null) {
             try {
                 methodMapping.getOnOpen().invoke(pojo,
-                        methodMapping.getOnOpenArgs(pathParameters, session));
+                        methodMapping.getOnOpenArgs(
+                                pathParameters, session, config));
 
             } catch (IllegalAccessException e) {
                 // Reflection related problems

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java?rev=1495216&r1=1495215&r2=1495216&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java 
Thu Jun 20 22:24:25 2013
@@ -112,8 +112,9 @@ public class PojoMethodMapping {
 
 
     public Object[] getOnOpenArgs(Map<String,String> pathParameters,
-            Session session) throws DecodeException {
-        return buildArgs(onOpenParams, pathParameters, session, null, null);
+            Session session, EndpointConfig config) throws DecodeException {
+        return buildArgs(onOpenParams, pathParameters, session, config, null,
+                null);
     }
 
 
@@ -124,8 +125,8 @@ public class PojoMethodMapping {
 
     public Object[] getOnCloseArgs(Map<String,String> pathParameters,
             Session session, CloseReason closeReason) throws DecodeException {
-        return buildArgs(
-                onCloseParams, pathParameters, session, null, closeReason);
+        return buildArgs(onCloseParams, pathParameters, session, null, null,
+                closeReason);
     }
 
 
@@ -136,8 +137,8 @@ public class PojoMethodMapping {
 
     public Object[] getOnErrorArgs(Map<String,String> pathParameters,
             Session session, Throwable throwable) throws DecodeException {
-        return buildArgs(
-                onErrorParams, pathParameters, session, throwable, null);
+        return buildArgs(onErrorParams, pathParameters, session, null,
+                throwable, null);
     }
 
 
@@ -189,6 +190,9 @@ public class PojoMethodMapping {
             Class<?> type = types[i];
             if (type.equals(Session.class)) {
                 result[i] = new PojoPathParam(type, null);
+            } else if (methodType == MethodType.ON_OPEN &&
+                    type.equals(EndpointConfig.class)) {
+                result[i] = new PojoPathParam(type, null);
             } else if (methodType == MethodType.ON_ERROR
                     && type.equals(Throwable.class)) {
                 foundThrowable = true;
@@ -223,13 +227,15 @@ public class PojoMethodMapping {
 
     private static Object[] buildArgs(PojoPathParam[] pathParams,
             Map<String,String> pathParameters, Session session,
-            Throwable throwable, CloseReason closeReason)
+            EndpointConfig config, Throwable throwable, CloseReason 
closeReason)
             throws DecodeException {
         Object[] result = new Object[pathParams.length];
         for (int i = 0; i < pathParams.length; i++) {
             Class<?> type = pathParams[i].getType();
             if (type.equals(Session.class)) {
                 result[i] = session;
+            } else if (type.equals(EndpointConfig.class)) {
+                result[i] = config;
             } else if (type.equals(Throwable.class)) {
                 result[i] = throwable;
             } else if (type.equals(CloseReason.class)) {

Modified: 
tomcat/trunk/test/org/apache/tomcat/websocket/pojo/TestPojoEndpointBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/pojo/TestPojoEndpointBase.java?rev=1495216&r1=1495215&r2=1495216&view=diff
==============================================================================
--- 
tomcat/trunk/test/org/apache/tomcat/websocket/pojo/TestPojoEndpointBase.java 
(original)
+++ 
tomcat/trunk/test/org/apache/tomcat/websocket/pojo/TestPojoEndpointBase.java 
Thu Jun 20 22:24:25 2013
@@ -22,8 +22,11 @@ import java.util.concurrent.TimeUnit;
 
 import javax.websocket.ClientEndpoint;
 import javax.websocket.ContainerProvider;
+import javax.websocket.EndpointConfig;
 import javax.websocket.OnClose;
+import javax.websocket.OnError;
 import javax.websocket.OnOpen;
+import javax.websocket.Session;
 import javax.websocket.WebSocketContainer;
 import javax.websocket.server.ServerEndpoint;
 
@@ -72,6 +75,56 @@ public class TestPojoEndpointBase extend
         Assert.assertTrue("Server failed to close connection", closed);
     }
 
+    @Test
+    public void testOnOpenPojoMethod() throws Exception {
+        // Set up utility classes
+        OnOpenServerEndpoint server = new OnOpenServerEndpoint();
+        SingletonConfigurator.setInstance(server);
+        ServerConfigListener.setPojoClazz(OnOpenServerEndpoint.class);
+
+        Tomcat tomcat = getTomcatInstance();
+        // Must have a real docBase - just use temp
+        Context ctx =
+            tomcat.addContext("", System.getProperty("java.io.tmpdir"));
+        ctx.addApplicationListener(new ApplicationListener(
+                ServerConfigListener.class.getName(), false));
+        Tomcat.addServlet(ctx, "default", new DefaultServlet());
+        ctx.addServletMapping("/", "default");
+
+        WebSocketContainer wsContainer =
+                ContainerProvider.getWebSocketContainer();
+
+
+        tomcat.start();
+
+        Client client = new Client();
+        URI uri = new URI("ws://localhost:" + getPort() + "/");
+
+        Session session = wsContainer.connectToServer(client, uri);
+
+        client.waitForClose(5);
+        Assert.assertTrue(session.isOpen());
+    }
+
+
+
+    @ServerEndpoint("/")
+    public static class OnOpenServerEndpoint {
+
+        @OnOpen
+        public void onOpen(@SuppressWarnings("unused") Session session,
+                EndpointConfig config) {
+            if (config == null) {
+                throw new RuntimeException();
+            }
+        }
+
+        @OnError
+        public void onError(@SuppressWarnings("unused") Throwable t){
+            throw new RuntimeException();
+        }
+    }
+
 
     @ServerEndpoint("/")
     public static class Bug54716 {

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1495216&r1=1495215&r2=1495216&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Thu Jun 20 22:24:25 2013
@@ -56,7 +56,8 @@
       </add>
       <add>
         Implement JSR 356 - WebSockets. The JSR 356 implementation includes
-        contributions from Nick Williams and Rossen Stoyanchev. (markt)
+        contributions from Nick Williams, Rossen Stoyanchev and Niki Dokovski.
+        (markt)
       </add>
       <add>
         <bug>45995</bug>: Align Tomcat with Apache httpd and perform MIME type



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to