This commit is contained in:
@@ -133,6 +133,7 @@
|
||||
<rest base="org.redkale.net.http.DefaultRestServlet" mustsign="false" autoload="true" includes="" excludes="">
|
||||
<!--
|
||||
value: Service类名,列出的表示必须被加载的Service对象, 且对象的Resource资源名称只能是""。
|
||||
ignore: 是否忽略,设置为true则不会加载该Service对象,默认值为false
|
||||
-->
|
||||
<service value="com.xxx.XXXXService"/>
|
||||
</rest>
|
||||
|
||||
@@ -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<AbstractMap.SimpleEntry<String, String[]>> ss = sb == null ? null : new ArrayList<>();
|
||||
|
||||
final Class<? extends RestHttpServlet> baseServletClass = (Class<? extends RestHttpServlet>) 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 {
|
||||
|
||||
@@ -25,7 +25,7 @@ import org.redkale.source.Flipper;
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public final class RestServletBuilder {
|
||||
public final class Rest {
|
||||
|
||||
private static final Set<String> EXCLUDERMETHODS = new HashSet<>();
|
||||
|
||||
@@ -35,7 +35,7 @@ public final class RestServletBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
private RestServletBuilder() {
|
||||
private Rest() {
|
||||
}
|
||||
|
||||
public static String getWebModuleName(Class<? extends Service> serviceType) {
|
||||
@@ -45,8 +45,7 @@ public final class RestServletBuilder {
|
||||
return (!controller.value().isEmpty()) ? controller.value() : serviceType.getSimpleName().replaceAll("Service.*$", "").toLowerCase();
|
||||
}
|
||||
|
||||
//待实现
|
||||
public static <T extends RestHttpServlet> T createRestServlet(final Class<T> baseServletClass, final String serviceName, final Class<? extends Service> serviceType, final boolean sncp) {
|
||||
public static <T extends RestHttpServlet> T createRestServlet(final Class<T> baseServletClass, final String serviceName, final Class<? extends Service> serviceType) {
|
||||
if (baseServletClass == null || serviceType == null) return null;
|
||||
if (!RestHttpServlet.class.isAssignableFrom(baseServletClass)) return null;
|
||||
int mod = baseServletClass.getModifiers();
|
||||
@@ -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<T> 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]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user