You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2021/04/30 10:15:08 UTC
[tomcat] branch 8.5.x updated: Refactor passing of path parameters
to POJO end points
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/8.5.x by this push:
new 81e49ce Refactor passing of path parameters to POJO end points
81e49ce is described below
commit 81e49cee6c2b9e453e2f4b5e1ae44ba13dc6797f
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Fri Apr 30 11:13:35 2021 +0100
Refactor passing of path parameters to POJO end points
I don't recall why path parameters were originally passed via user
properties (possibly so the wrapper had a 0-arg constructor?) but the
refactoring removes the need for this and simplifies the code.
This is technically a public API change but it is primarily Tomcat
internals and I can't see a reason that users or frameworks would be
using it therefore I have made a breaking change.
---
java/org/apache/tomcat/websocket/pojo/Constants.java | 2 --
.../apache/tomcat/websocket/pojo/PojoEndpointBase.java | 14 ++++++--------
.../apache/tomcat/websocket/pojo/PojoEndpointClient.java | 6 ++----
.../apache/tomcat/websocket/pojo/PojoEndpointServer.java | 15 +++++++--------
java/org/apache/tomcat/websocket/server/UpgradeUtil.java | 8 ++------
webapps/docs/changelog.xml | 8 ++++++++
6 files changed, 25 insertions(+), 28 deletions(-)
diff --git a/java/org/apache/tomcat/websocket/pojo/Constants.java b/java/org/apache/tomcat/websocket/pojo/Constants.java
index 686443a..762ac9f 100644
--- a/java/org/apache/tomcat/websocket/pojo/Constants.java
+++ b/java/org/apache/tomcat/websocket/pojo/Constants.java
@@ -21,8 +21,6 @@ package org.apache.tomcat.websocket.pojo;
*/
public class Constants {
- public static final String POJO_PATH_PARAM_KEY =
- "org.apache.tomcat.websocket.pojo.PojoEndpoint.pathParams";
public static final String POJO_METHOD_MAPPING_KEY =
"org.apache.tomcat.websocket.pojo.PojoEndpoint.methodMapping";
diff --git a/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java b/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java
index 75615d4..fa71489 100644
--- a/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java
+++ b/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java
@@ -43,14 +43,18 @@ public abstract class PojoEndpointBase extends Endpoint {
private static final StringManager sm = StringManager.getManager(PojoEndpointBase.class);
private Object pojo;
- private Map<String,String> pathParameters;
+ private final Map<String,String> pathParameters;
private PojoMethodMapping methodMapping;
+ protected PojoEndpointBase(Map<String,String> pathParameters) {
+ this.pathParameters = pathParameters;
+ }
+
+
protected final void doOnOpen(Session session, EndpointConfig config) {
PojoMethodMapping methodMapping = getMethodMapping();
Object pojo = getPojo();
- Map<String,String> pathParameters = getPathParameters();
// Add message handlers before calling onOpen since that may trigger a
// message which in turn could trigger a response and/or close the
@@ -143,12 +147,6 @@ public abstract class PojoEndpointBase extends Endpoint {
protected void setPojo(Object pojo) { this.pojo = pojo; }
- protected Map<String,String> getPathParameters() { return pathParameters; }
- protected void setPathParameters(Map<String,String> pathParameters) {
- this.pathParameters = pathParameters;
- }
-
-
protected PojoMethodMapping getMethodMapping() { return methodMapping; }
protected void setMethodMapping(PojoMethodMapping methodMapping) {
this.methodMapping = methodMapping;
diff --git a/java/org/apache/tomcat/websocket/pojo/PojoEndpointClient.java b/java/org/apache/tomcat/websocket/pojo/PojoEndpointClient.java
index f4d0567..f42ad1f 100644
--- a/java/org/apache/tomcat/websocket/pojo/PojoEndpointClient.java
+++ b/java/org/apache/tomcat/websocket/pojo/PojoEndpointClient.java
@@ -24,7 +24,6 @@ import javax.websocket.DeploymentException;
import javax.websocket.EndpointConfig;
import javax.websocket.Session;
-
/**
* Wrapper class for instances of POJOs annotated with
* {@link javax.websocket.ClientEndpoint} so they appear as standard
@@ -34,10 +33,9 @@ public class PojoEndpointClient extends PojoEndpointBase {
public PojoEndpointClient(Object pojo,
List<Class<? extends Decoder>> decoders) throws DeploymentException {
+ super(Collections.<String,String>emptyMap());
setPojo(pojo);
- setMethodMapping(
- new PojoMethodMapping(pojo.getClass(), decoders, null));
- setPathParameters(Collections.<String,String>emptyMap());
+ setMethodMapping(new PojoMethodMapping(pojo.getClass(), decoders, null));
}
@Override
diff --git a/java/org/apache/tomcat/websocket/pojo/PojoEndpointServer.java b/java/org/apache/tomcat/websocket/pojo/PojoEndpointServer.java
index 48af737..6dcf3eb 100644
--- a/java/org/apache/tomcat/websocket/pojo/PojoEndpointServer.java
+++ b/java/org/apache/tomcat/websocket/pojo/PojoEndpointServer.java
@@ -31,8 +31,13 @@ import org.apache.tomcat.util.res.StringManager;
*/
public class PojoEndpointServer extends PojoEndpointBase {
- private static final StringManager sm =
- StringManager.getManager(PojoEndpointServer.class);
+ private static final StringManager sm = StringManager.getManager(PojoEndpointServer.class);
+
+
+ public PojoEndpointServer(Map<String,String> pathParameters) {
+ super(pathParameters);
+ }
+
@Override
public void onOpen(Session session, EndpointConfig endpointConfig) {
@@ -50,12 +55,6 @@ public class PojoEndpointServer extends PojoEndpointBase {
}
setPojo(pojo);
- @SuppressWarnings("unchecked")
- Map<String,String> pathParameters =
- (Map<String, String>) sec.getUserProperties().get(
- Constants.POJO_PATH_PARAM_KEY);
- setPathParameters(pathParameters);
-
PojoMethodMapping methodMapping =
(PojoMethodMapping) sec.getUserProperties().get(
Constants.POJO_METHOD_MAPPING_KEY);
diff --git a/java/org/apache/tomcat/websocket/server/UpgradeUtil.java b/java/org/apache/tomcat/websocket/server/UpgradeUtil.java
index d522283..d1ed9cc 100644
--- a/java/org/apache/tomcat/websocket/server/UpgradeUtil.java
+++ b/java/org/apache/tomcat/websocket/server/UpgradeUtil.java
@@ -219,13 +219,9 @@ public class UpgradeUtil {
try {
Class<?> clazz = sec.getEndpointClass();
if (Endpoint.class.isAssignableFrom(clazz)) {
- ep = (Endpoint) sec.getConfigurator().getEndpointInstance(
- clazz);
+ ep = (Endpoint) sec.getConfigurator().getEndpointInstance(clazz);
} else {
- ep = new PojoEndpointServer();
- // Need to make path params available to POJO
- perSessionServerEndpointConfig.getUserProperties().put(
- org.apache.tomcat.websocket.pojo.Constants.POJO_PATH_PARAM_KEY, pathParams);
+ ep = new PojoEndpointServer(pathParams);
}
} catch (InstantiationException e) {
throw new ServletException(e);
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 6657c4b..355721d 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -162,6 +162,14 @@
</fix>
</changelog>
</subsection>
+ <subsection name="WebSocket">
+ <changelog>
+ <scode>
+ Refactor the way Tomcat passes path parameters to POJO end points to
+ simplify the code. (markt)
+ </scode>
+ </changelog>
+ </subsection>
<subsection name="Web applications">
<changelog>
<fix>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org