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: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to