diff --git a/src/META-INF/application-template.xml b/src/META-INF/application-template.xml index 4712f96cd..69353f8b1 100644 --- a/src/META-INF/application-template.xml +++ b/src/META-INF/application-template.xml @@ -133,6 +133,7 @@ diff --git a/src/org/redkale/boot/NodeHttpServer.java b/src/org/redkale/boot/NodeHttpServer.java index 4a936fd96..24c589902 100644 --- a/src/org/redkale/boot/NodeHttpServer.java +++ b/src/org/redkale/boot/NodeHttpServer.java @@ -29,9 +29,9 @@ import org.redkale.util.*; @NodeProtocol({"HTTP"}) public class NodeHttpServer extends NodeServer { - protected boolean rest; + protected final boolean rest; - protected boolean sncp; + protected final boolean sncp; protected final HttpServer httpServer; @@ -154,7 +154,7 @@ public class NodeHttpServer extends NodeServer { final String threadName = "[" + Thread.currentThread().getName() + "] "; final List> ss = sb == null ? null : new ArrayList<>(); - final Class baseServletClass = (Class) Class.forName(restConf.getValue("servlet", DefaultRestServlet.class.getName())); + final Class baseServletClass = Class.forName(restConf.getValue("servlet", DefaultRestServlet.class.getName())); final boolean autoload = restConf.getBoolValue("autoload", true); final boolean mustsign = restConf.getBoolValue("mustsign", true); //是否只加载标记@RestService的Service类 @@ -183,7 +183,7 @@ public class NodeHttpServer extends NodeServer { if (!autoload && !includeValues.contains(stypename)) return; if (!restFilter.accept(stypename)) return; - RestHttpServlet servlet = RestServletBuilder.createRestServlet(baseServletClass, wrapper.getName(), stype, sncp); + RestHttpServlet servlet = Rest.createRestServlet(baseServletClass, wrapper.getName(), stype); if (servlet == null) return; if (finest) logger.finest("Create RestServlet = " + servlet); try { diff --git a/src/org/redkale/net/http/RestServletBuilder.java b/src/org/redkale/net/http/Rest.java similarity index 97% rename from src/org/redkale/net/http/RestServletBuilder.java rename to src/org/redkale/net/http/Rest.java index 4935bfe74..02a0a0dd6 100644 --- a/src/org/redkale/net/http/RestServletBuilder.java +++ b/src/org/redkale/net/http/Rest.java @@ -25,7 +25,7 @@ import org.redkale.source.Flipper; * * @author zhangjx */ -public final class RestServletBuilder { +public final class Rest { private static final Set EXCLUDERMETHODS = new HashSet<>(); @@ -35,7 +35,7 @@ public final class RestServletBuilder { } } - private RestServletBuilder() { + private Rest() { } public static String getWebModuleName(Class serviceType) { @@ -45,8 +45,7 @@ public final class RestServletBuilder { return (!controller.value().isEmpty()) ? controller.value() : serviceType.getSimpleName().replaceAll("Service.*$", "").toLowerCase(); } - //待实现 - public static T createRestServlet(final Class baseServletClass, final String serviceName, final Class serviceType, final boolean sncp) { + public static T createRestServlet(final Class baseServletClass, final String serviceName, final Class serviceType) { if (baseServletClass == null || serviceType == null) return null; if (!RestHttpServlet.class.isAssignableFrom(baseServletClass)) return null; int mod = baseServletClass.getModifiers(); diff --git a/src/org/redkale/net/http/RestHttpServlet.java b/src/org/redkale/net/http/RestHttpServlet.java index e92e86c5e..2c9489940 100644 --- a/src/org/redkale/net/http/RestHttpServlet.java +++ b/src/org/redkale/net/http/RestHttpServlet.java @@ -6,6 +6,7 @@ package org.redkale.net.http; import java.io.IOException; +import org.redkale.util.Attribute; /** * @@ -16,6 +17,17 @@ import java.io.IOException; */ public abstract class RestHttpServlet extends HttpBaseServlet { + Attribute[] _paramAttrs; // 为null表示无DynCall处理,index=0固定为null, 其他为参数标记的DynCall回调方法 + protected abstract T currentUser(HttpRequest req) throws IOException; + protected void _callParameter(final HttpResponse response, final Object... params) { + if (_paramAttrs == null) return; + for (int i = 1; i < _paramAttrs.length; i++) { + org.redkale.util.Attribute attr = _paramAttrs[i]; + if (attr == null) continue; + + //convert.convertTo(out, attr.type(), attr.get(params[i - 1])); + } + } } diff --git a/src/org/redkale/net/sncp/SncpDynServlet.java b/src/org/redkale/net/sncp/SncpDynServlet.java index fb79cf9a7..6841ef1bc 100644 --- a/src/org/redkale/net/sncp/SncpDynServlet.java +++ b/src/org/redkale/net/sncp/SncpDynServlet.java @@ -146,7 +146,7 @@ public final class SncpDynServlet extends SncpServlet { public abstract void action(final BsonReader in, final BsonWriter out) throws Throwable; - public final void callParameter(final BsonWriter out, final Object... params) { + public final void _callParameter(final BsonWriter out, final Object... params) { if (paramAttrs != null) { for (int i = 1; i < paramAttrs.length; i++) { org.redkale.util.Attribute attr = paramAttrs[i]; @@ -176,7 +176,7 @@ public final class SncpDynServlet extends SncpServlet { * String arg2 = convert.convertFrom(paramTypes[2], in); * int arg3 = convert.convertFrom(paramTypes[3], in); * Object rs = service.change(arg1, arg2, arg3); - * callParameter(out, arg1, arg2, arg3); + * _callParameter(out, arg1, arg2, arg3); * convert.convertTo(out, paramTypes[0], rs); * } * } @@ -317,7 +317,7 @@ public final class SncpDynServlet extends SncpServlet { } mv.visitVarInsn(ASTORE, store); //11 } - //------------------------- callParameter 方法 -------------------------------- + //------------------------- _callParameter 方法 -------------------------------- mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 2); if (paramClasses.length <= 5) { //参数总数量 @@ -353,7 +353,7 @@ public final class SncpDynServlet extends SncpServlet { } mv.visitInsn(AASTORE); } - mv.visitMethodInsn(INVOKEVIRTUAL, newDynName, "callParameter", "(" + convertWriterDesc + "[Ljava/lang/Object;)V", false); + mv.visitMethodInsn(INVOKEVIRTUAL, newDynName, "_callParameter", "(" + convertWriterDesc + "[Ljava/lang/Object;)V", false); //-------------------------直接返回 或者 调用convertTo方法 -------------------------------- int maxStack = codes.length > 0 ? codes[codes.length - 1][1] : 1;