Author: markt
Date: Fri Mar 22 17:02:00 2013
New Revision: 1459896

URL: http://svn.apache.org/r1459896
Log:
Add support for primitive messages (and their object equivalents)

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java

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=1459896&r1=1459895&r2=1459896&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java 
Fri Mar 22 17:02:00 2013
@@ -282,6 +282,7 @@ public class PojoMethodMapping {
         private int indexSession = -1;
         private int indexInputStream = -1;
         private int indexReader = -1;
+        private int indexPrimitive = -1;
         private Map<Integer,PojoPathParam> indexPathParams = new HashMap<>();
         private int indexPayload = -1;
 
@@ -356,6 +357,14 @@ public class PojoMethodMapping {
                                 "pojoMethodMapping.duplicateMessageParam",
                                 m.getName(), m.getDeclaringClass().getName()));
                     }
+                } else if (isPrimitive(types[i])) {
+                    if (indexPrimitive == -1) {
+                        indexPrimitive = i;
+                    } else {
+                        throw new IllegalArgumentException(sm.getString(
+                                "pojoMethodMapping.duplicateMessageParam",
+                                m.getName(), m.getDeclaringClass().getName()));
+                    }
                 } else if (types[i] == Session.class) {
                     if (indexSession == -1) {
                         indexSession = i;
@@ -441,6 +450,15 @@ public class PojoMethodMapping {
                     indexPayload = indexInputStream;
                 }
             }
+            if (indexPrimitive != -1) {
+                if (indexPayload != -1) {
+                    throw new IllegalArgumentException(sm.getString(
+                            "pojoMethodMapping.duplicateMessageParam",
+                            m.getName(), m.getDeclaringClass().getName()));
+                } else {
+                    indexPayload = indexPrimitive;
+                }
+            }
             if (indexPong != -1) {
                 if (indexPayload != -1) {
                     throw new IllegalArgumentException(sm.getString(
@@ -450,6 +468,12 @@ public class PojoMethodMapping {
                     indexPayload = indexPong;
                 }
             }
+            if (indexPayload == -1 && indexPrimitive == -1 &&
+                    indexBoolean != -1) {
+                // The boolean we found is a payload, not an last flag
+                indexPayload = indexBoolean;
+                indexBoolean = -1;
+            }
             if (indexPayload == -1) {
                 throw new IllegalArgumentException(sm.getString(
                         "pojoMethodMapping.noPayload",
@@ -473,6 +497,23 @@ public class PojoMethodMapping {
         }
 
 
+        private boolean isPrimitive(Class<?> clazz) {
+            if (clazz.isPrimitive()) {
+                return true;
+            } else if(clazz.equals(Boolean.class) ||
+                    clazz.equals(Byte.class) ||
+                    clazz.equals(Character.class) ||
+                    clazz.equals(Double.class) ||
+                    clazz.equals(Float.class) ||
+                    clazz.equals(Integer.class) ||
+                    clazz.equals(Long.class) ||
+                    clazz.equals(Short.class)) {
+                return true;
+            }
+            return false;
+        }
+
+
         public MessageHandler getMessageHandler(Object pojo,
                 Map<String,String> pathParameters, Session session,
                 EndpointConfig config) {



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

Reply via email to