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