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: [email protected]
For additional commands, e-mail: [email protected]