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