Author: markt
Date: Thu Jan 31 18:32:02 2019
New Revision: 1852628
URL: http://svn.apache.org/viewvc?rev=1852628&view=rev
Log:
Improve algorithm that determines if two @OnMessage annotations have been added
for the same message type. Prior to this change some matches were missed.
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java
tomcat/trunk/webapps/docs/changelog.xml
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=1852628&r1=1852627&r2=1852628&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java
Thu Jan 31 18:32:02 2019
@@ -373,7 +373,6 @@ public class PojoMethodMapping {
private int indexInputStream = -1;
private int indexReader = -1;
private int indexPrimitive = -1;
- private Class<?> primitiveType = null;
private Map<Integer,PojoPathParam> indexPathParams = new HashMap<>();
private int indexPayload = -1;
private DecoderMatch decoderMatch = null;
@@ -454,7 +453,6 @@ public class PojoMethodMapping {
} else if (Util.isPrimitive(types[i])) {
if (indexPrimitive == -1) {
indexPrimitive = i;
- primitiveType = types[i];
} else {
throw new DeploymentException(sm.getString(
"pojoMethodMapping.duplicateMessageParam",
@@ -561,7 +559,6 @@ public class PojoMethodMapping {
// The boolean we found is a payload, not a last flag
indexPayload = indexBoolean;
indexPrimitive = indexBoolean;
- primitiveType = Boolean.TYPE;
indexBoolean = -1;
}
if (indexPayload == -1) {
@@ -599,33 +596,26 @@ public class PojoMethodMapping {
if (otherHandler == null) {
return false;
}
- if (indexByteArray >= 0 && otherHandler.indexByteArray >= 0) {
- return true;
- }
- if (indexByteBuffer >= 0 && otherHandler.indexByteBuffer >= 0) {
- return true;
- }
- if (indexInputStream >= 0 && otherHandler.indexInputStream >= 0) {
- return true;
- }
- if (indexPong >= 0 && otherHandler.indexPong >= 0) {
- return true;
- }
- if (indexPrimitive >= 0 && otherHandler.indexPrimitive >= 0
- && primitiveType == otherHandler.primitiveType) {
- return true;
- }
- if (indexReader >= 0 && otherHandler.indexReader >= 0) {
- return true;
- }
- if (indexString >= 0 && otherHandler.indexString >= 0) {
- return true;
- }
- if (decoderMatch != null && otherHandler.decoderMatch != null
- &&
decoderMatch.getTarget().equals(otherHandler.decoderMatch.getTarget())) {
- return true;
- }
- return false;
+
+ return isPong() && otherHandler.isPong() || isBinary() &&
otherHandler.isBinary() ||
+ isText() && otherHandler.isText();
+ }
+
+
+ private boolean isPong() {
+ return indexPong >= 0;
+ }
+
+
+ private boolean isText() {
+ return indexString >= 0 || indexPrimitive >= 0 || indexReader >= 0
||
+ (decoderMatch != null &&
decoderMatch.getTextDecoders().size() > 0);
+ }
+
+
+ private boolean isBinary() {
+ return indexByteArray >= 0 || indexByteBuffer >= 0 ||
indexInputStream >= 0 ||
+ (decoderMatch != null &&
decoderMatch.getBinaryDecoders().size() > 0);
}
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1852628&r1=1852627&r2=1852628&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Thu Jan 31 18:32:02 2019
@@ -217,6 +217,11 @@
with <code>@OnMessage</code> does not conform to the requirements set
out in the Javadoc. (mark)
</fix>
+ <fix>
+ Improve algorithm that determines if two <code>@OnMessage</code>
+ annotations have been added for the same message type. Prior to this
+ change some matches were missed. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Web applications">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]