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:14:22 UTC

[tomcat] branch master 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 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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org