This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/master by this push: new e498a7d Refactor passing of path parameters to POJO end points e498a7d is described below commit e498a7dc8e6d3db852199288013ac58d6263f93d 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 41ddd0d..98e45cc 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 2d9e224..66033f3 100644 --- a/java/org/apache/tomcat/websocket/pojo/PojoEndpointClient.java +++ b/java/org/apache/tomcat/websocket/pojo/PojoEndpointClient.java @@ -24,7 +24,6 @@ import jakarta.websocket.DeploymentException; import jakarta.websocket.EndpointConfig; import jakarta.websocket.Session; - /** * Wrapper class for instances of POJOs annotated with * {@link jakarta.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 b41145c..2549d55 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 8e647df..e0cff21 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 ce24492..00ee7d5 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -166,6 +166,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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org