Author: markt
Date: Fri Jun 21 21:07:06 2013
New Revision: 1495600
URL: http://svn.apache.org/r1495600
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55126
For methods annotated with @onMessage
It is OK for multiple decoders to match a single message parameter
It is not OK for multiple parameters within a method to be possible message
parameters.
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=1495600&r1=1495599&r2=1495600&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java
Fri Jun 21 21:07:06 2013
@@ -367,6 +367,8 @@ public class PojoMethodMapping {
m.getName(), m.getDeclaringClass().getName()));
}
} else {
+ boolean foundBinaryDecoderMatch = false;
+ boolean foundTextDecoderMatch = false;
for (DecoderEntry decoderEntry : decoderEntries) {
if (decoderEntry.getClazz().isAssignableFrom(
types[i])) {
@@ -374,21 +376,26 @@ public class PojoMethodMapping {
decoderEntry.getDecoder().getClass())
||
BinaryStream.class.isAssignableFrom(
decoderEntry.getDecoder().getClass())) {
- if (indexByteBuffer == -1) {
- indexByteBuffer = i;
- } else {
- throw new
IllegalArgumentException(sm.getString(
-
"pojoMethodMapping.duplicateMessageParam",
- m.getName(),
m.getDeclaringClass().getName()));
+ if (!foundBinaryDecoderMatch) {
+ if (indexByteBuffer == -1) {
+ indexByteBuffer = i;
+ foundBinaryDecoderMatch = true;
+ } else {
+ throw new
IllegalArgumentException(sm.getString(
+
"pojoMethodMapping.duplicateMessageParam",
+ m.getName(),
m.getDeclaringClass().getName()));
+ }
}
- break;
} else {
- if (indexString == -1) {
- indexString = i;
- } else {
- throw new
IllegalArgumentException(sm.getString(
-
"pojoMethodMapping.duplicateMessageParam",
- m.getName(),
m.getDeclaringClass().getName()));
+ if (!foundTextDecoderMatch) {
+ if (indexString == -1) {
+ indexString = i;
+ foundTextDecoderMatch = true;
+ } else {
+ throw new
IllegalArgumentException(sm.getString(
+
"pojoMethodMapping.duplicateMessageParam",
+ m.getName(),
m.getDeclaringClass().getName()));
+ }
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]