You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tubemq.apache.org by do...@apache.org on 2020/12/01 01:24:26 UTC

[incubator-tubemq] branch TUBEMQ-430 updated: [TUBEMQ-434] Adjust Broker API mapping (#329)

This is an automated email from the ASF dual-hosted git repository.

dockerzhang pushed a commit to branch TUBEMQ-430
in repository https://gitbox.apache.org/repos/asf/incubator-tubemq.git


The following commit(s) were added to refs/heads/TUBEMQ-430 by this push:
     new 0607e98  [TUBEMQ-434] Adjust Broker API mapping (#329)
0607e98 is described below

commit 0607e98053016743ea1078865982680fd68fc176
Author: gosonzhang <46...@qq.com>
AuthorDate: Tue Dec 1 09:24:17 2020 +0800

    [TUBEMQ-434] Adjust Broker API mapping (#329)
    
    Co-authored-by: gosonzhang <go...@tencent.com>
---
 .../server/broker/web/AbstractWebHandler.java      | 83 ++++++++++++++++++++++
 .../webbase/WebMethodMapper.java}                  | 12 ++--
 .../server/master/web/action/screen/Webapi.java    |  6 +-
 .../master/web/handler/AbstractWebHandler.java     |  2 +-
 4 files changed, 93 insertions(+), 10 deletions(-)

diff --git a/tubemq-server/src/main/java/org/apache/tubemq/server/broker/web/AbstractWebHandler.java b/tubemq-server/src/main/java/org/apache/tubemq/server/broker/web/AbstractWebHandler.java
new file mode 100644
index 0000000..b44d88c
--- /dev/null
+++ b/tubemq-server/src/main/java/org/apache/tubemq/server/broker/web/AbstractWebHandler.java
@@ -0,0 +1,83 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tubemq.server.broker.web;
+
+import static org.apache.tubemq.server.common.webbase.WebMethodMapper.getWebApiRegInfo;
+import static org.apache.tubemq.server.common.webbase.WebMethodMapper.registerWebMethod;
+import java.io.IOException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.tubemq.server.broker.TubeBroker;
+import org.apache.tubemq.server.common.webbase.WebMethodMapper.WebApiRegInfo;
+
+
+
+public abstract class AbstractWebHandler extends HttpServlet {
+
+    protected final TubeBroker broker;
+
+    public AbstractWebHandler(TubeBroker broker) {
+        this.broker = broker;
+    }
+
+    @Override
+    protected void doGet(HttpServletRequest req,
+                         HttpServletResponse resp) throws IOException {
+        doPost(req, resp);
+    }
+
+    @Override
+    protected void doPost(HttpServletRequest req,
+                          HttpServletResponse resp) throws IOException {
+        StringBuilder strBuffer = new StringBuilder(1024);
+
+        try {
+            String method = req.getParameter("method");
+            if (method == null) {
+                strBuffer.append("{\"result\":false,\"errCode\":400,\"errMsg\":\"")
+                        .append("Please take with method parameter! \"}");
+            } else {
+                WebApiRegInfo webApiRegInfo = getWebApiRegInfo(true, method);
+                if (webApiRegInfo == null) {
+                    strBuffer.append("{\"result\":false,\"errCode\":400,\"errMsg\":\"")
+                            .append("Unsupported method ").append(method).append("}");
+                } else {
+                    strBuffer = (StringBuilder) webApiRegInfo.method.invoke(webApiRegInfo.webHandler, req);
+                }
+            }
+        } catch (Throwable e) {
+            strBuffer.append("{\"result\":false,\"errCode\":400,\"errMsg\":\"")
+                    .append("Bad request from server: ")
+                    .append(e.getMessage())
+                    .append("\"}");
+        }
+        resp.getWriter().write(strBuffer.toString());
+        resp.setCharacterEncoding(req.getCharacterEncoding());
+        resp.setStatus(HttpServletResponse.SC_OK);
+        resp.flushBuffer();
+    }
+
+    public abstract void registerWebApiMethod();
+
+    protected void innRegisterWebMethod(String webMethodName,
+                                        String clsMethodName) {
+        registerWebMethod(true, webMethodName, clsMethodName, this);
+    }
+
+}
diff --git a/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/handler/WebApiMapper.java b/tubemq-server/src/main/java/org/apache/tubemq/server/common/webbase/WebMethodMapper.java
similarity index 87%
rename from tubemq-server/src/main/java/org/apache/tubemq/server/master/web/handler/WebApiMapper.java
rename to tubemq-server/src/main/java/org/apache/tubemq/server/common/webbase/WebMethodMapper.java
index a71ba03..a856014 100644
--- a/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/handler/WebApiMapper.java
+++ b/tubemq-server/src/main/java/org/apache/tubemq/server/common/webbase/WebMethodMapper.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.tubemq.server.master.web.handler;
+package org.apache.tubemq.server.common.webbase;
 
 import java.lang.reflect.Method;
 import java.util.HashMap;
@@ -24,10 +24,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 
-public class WebApiMapper {
+public class WebMethodMapper {
     // log printer
     private static final Logger logger =
-            LoggerFactory.getLogger(WebApiMapper.class);
+            LoggerFactory.getLogger(WebMethodMapper.class);
     // The query methods map
     public static final Map<String, WebApiRegInfo> WEB_QRY_METHOD_MAP =
             new HashMap<>();
@@ -47,7 +47,7 @@ public class WebApiMapper {
     public static void registerWebMethod(boolean isQryApi,
                                          String webMethodName,
                                          String clsMethodName,
-                                         AbstractWebHandler webHandler) {
+                                         Object webHandler) {
         Method[] methods = webHandler.getClass().getMethods();
         for (Method item : methods) {
             if (item.getName().equals(clsMethodName)) {
@@ -71,10 +71,10 @@ public class WebApiMapper {
 
     public static class WebApiRegInfo {
         public Method method;
-        public AbstractWebHandler webHandler;
+        public Object webHandler;
 
         public WebApiRegInfo(Method method,
-                             AbstractWebHandler webHandler) {
+                             Object webHandler) {
             this.method = method;
             this.webHandler = webHandler;
         }
diff --git a/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/action/screen/Webapi.java b/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/action/screen/Webapi.java
index 326f690..5d4de04 100644
--- a/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/action/screen/Webapi.java
+++ b/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/action/screen/Webapi.java
@@ -17,7 +17,7 @@
 
 package org.apache.tubemq.server.master.web.action.screen;
 
-import static org.apache.tubemq.server.master.web.handler.WebApiMapper.getWebApiRegInfo;
+import static org.apache.tubemq.server.common.webbase.WebMethodMapper.getWebApiRegInfo;
 
 import java.util.Arrays;
 import java.util.List;
@@ -25,13 +25,13 @@ import javax.servlet.http.HttpServletRequest;
 import org.apache.tubemq.corebase.TBaseConstants;
 import org.apache.tubemq.corebase.utils.TStringUtils;
 import org.apache.tubemq.corerpc.exception.StandbyException;
+import org.apache.tubemq.server.common.webbase.WebMethodMapper;
 import org.apache.tubemq.server.master.TMaster;
 import org.apache.tubemq.server.master.nodemanage.nodebroker.BrokerConfManager;
 import org.apache.tubemq.server.master.web.handler.AbstractWebHandler;
 import org.apache.tubemq.server.master.web.handler.WebAdminFlowRuleHandler;
 import org.apache.tubemq.server.master.web.handler.WebAdminGroupCtrlHandler;
 import org.apache.tubemq.server.master.web.handler.WebAdminTopicAuthHandler;
-import org.apache.tubemq.server.master.web.handler.WebApiMapper;
 import org.apache.tubemq.server.master.web.handler.WebBrokerDefConfHandler;
 import org.apache.tubemq.server.master.web.handler.WebBrokerTopicConfHandler;
 import org.apache.tubemq.server.master.web.handler.WebMasterInfoHandler;
@@ -102,7 +102,7 @@ public class Webapi implements Action {
                             "DesignatedPrimary happened...please check if the other member is down");
                 }
             }
-            WebApiMapper.WebApiRegInfo webApiRegInfo = getWebApiRegInfo(isQuery, method);
+            WebMethodMapper.WebApiRegInfo webApiRegInfo = getWebApiRegInfo(isQuery, method);
             if (webApiRegInfo == null) {
                 strBuffer.append("{\"result\":false,\"errCode\":400,\"errMsg\":\"Unsupported method: ")
                         .append(method).append("}");
diff --git a/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/handler/AbstractWebHandler.java b/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/handler/AbstractWebHandler.java
index 09b11eb..1b1bfdc 100644
--- a/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/handler/AbstractWebHandler.java
+++ b/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/handler/AbstractWebHandler.java
@@ -17,7 +17,7 @@
 
 package org.apache.tubemq.server.master.web.handler;
 
-import static org.apache.tubemq.server.master.web.handler.WebApiMapper.registerWebMethod;
+import static org.apache.tubemq.server.common.webbase.WebMethodMapper.registerWebMethod;
 import org.apache.tubemq.server.master.TMaster;
 import org.apache.tubemq.server.master.nodemanage.nodebroker.BrokerConfManager;