This commit is contained in:
@@ -133,6 +133,7 @@
|
|||||||
<rest base="org.redkale.net.http.DefaultRestServlet" mustsign="false" autoload="true" includes="" excludes="">
|
<rest base="org.redkale.net.http.DefaultRestServlet" mustsign="false" autoload="true" includes="" excludes="">
|
||||||
<!--
|
<!--
|
||||||
value: Service类名,列出的表示必须被加载的Service对象, 且对象的Resource资源名称只能是""。
|
value: Service类名,列出的表示必须被加载的Service对象, 且对象的Resource资源名称只能是""。
|
||||||
|
ignore: 是否忽略,设置为true则不会加载该Service对象,默认值为false
|
||||||
-->
|
-->
|
||||||
<service value="com.xxx.XXXXService"/>
|
<service value="com.xxx.XXXXService"/>
|
||||||
</rest>
|
</rest>
|
||||||
|
|||||||
@@ -29,9 +29,9 @@ import org.redkale.util.*;
|
|||||||
@NodeProtocol({"HTTP"})
|
@NodeProtocol({"HTTP"})
|
||||||
public class NodeHttpServer extends NodeServer {
|
public class NodeHttpServer extends NodeServer {
|
||||||
|
|
||||||
protected boolean rest;
|
protected final boolean rest;
|
||||||
|
|
||||||
protected boolean sncp;
|
protected final boolean sncp;
|
||||||
|
|
||||||
protected final HttpServer httpServer;
|
protected final HttpServer httpServer;
|
||||||
|
|
||||||
@@ -154,7 +154,7 @@ public class NodeHttpServer extends NodeServer {
|
|||||||
final String threadName = "[" + Thread.currentThread().getName() + "] ";
|
final String threadName = "[" + Thread.currentThread().getName() + "] ";
|
||||||
final List<AbstractMap.SimpleEntry<String, String[]>> ss = sb == null ? null : new ArrayList<>();
|
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 autoload = restConf.getBoolValue("autoload", true);
|
||||||
final boolean mustsign = restConf.getBoolValue("mustsign", true); //是否只加载标记@RestService的Service类
|
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 (!autoload && !includeValues.contains(stypename)) return;
|
||||||
if (!restFilter.accept(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 (servlet == null) return;
|
||||||
if (finest) logger.finest("Create RestServlet = " + servlet);
|
if (finest) logger.finest("Create RestServlet = " + servlet);
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import org.redkale.source.Flipper;
|
|||||||
*
|
*
|
||||||
* @author zhangjx
|
* @author zhangjx
|
||||||
*/
|
*/
|
||||||
public final class RestServletBuilder {
|
public final class Rest {
|
||||||
|
|
||||||
private static final Set<String> EXCLUDERMETHODS = new HashSet<>();
|
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) {
|
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();
|
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) {
|
||||||
public static <T extends RestHttpServlet> T createRestServlet(final Class<T> baseServletClass, final String serviceName, final Class<? extends Service> serviceType, final boolean sncp) {
|
|
||||||
if (baseServletClass == null || serviceType == null) return null;
|
if (baseServletClass == null || serviceType == null) return null;
|
||||||
if (!RestHttpServlet.class.isAssignableFrom(baseServletClass)) return null;
|
if (!RestHttpServlet.class.isAssignableFrom(baseServletClass)) return null;
|
||||||
int mod = baseServletClass.getModifiers();
|
int mod = baseServletClass.getModifiers();
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.redkale.net.http;
|
package org.redkale.net.http;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import org.redkale.util.Attribute;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -16,6 +17,17 @@ import java.io.IOException;
|
|||||||
*/
|
*/
|
||||||
public abstract class RestHttpServlet<T> extends HttpBaseServlet {
|
public abstract class RestHttpServlet<T> extends HttpBaseServlet {
|
||||||
|
|
||||||
|
Attribute[] _paramAttrs; // 为null表示无DynCall处理,index=0固定为null, 其他为参数标记的DynCall回调方法
|
||||||
|
|
||||||
protected abstract T currentUser(HttpRequest req) throws IOException;
|
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 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) {
|
if (paramAttrs != null) {
|
||||||
for (int i = 1; i < paramAttrs.length; i++) {
|
for (int i = 1; i < paramAttrs.length; i++) {
|
||||||
org.redkale.util.Attribute attr = paramAttrs[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);
|
* String arg2 = convert.convertFrom(paramTypes[2], in);
|
||||||
* int arg3 = convert.convertFrom(paramTypes[3], in);
|
* int arg3 = convert.convertFrom(paramTypes[3], in);
|
||||||
* Object rs = service.change(arg1, arg2, arg3);
|
* Object rs = service.change(arg1, arg2, arg3);
|
||||||
* callParameter(out, arg1, arg2, arg3);
|
* _callParameter(out, arg1, arg2, arg3);
|
||||||
* convert.convertTo(out, paramTypes[0], rs);
|
* convert.convertTo(out, paramTypes[0], rs);
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
@@ -317,7 +317,7 @@ public final class SncpDynServlet extends SncpServlet {
|
|||||||
}
|
}
|
||||||
mv.visitVarInsn(ASTORE, store); //11
|
mv.visitVarInsn(ASTORE, store); //11
|
||||||
}
|
}
|
||||||
//------------------------- callParameter 方法 --------------------------------
|
//------------------------- _callParameter 方法 --------------------------------
|
||||||
mv.visitVarInsn(ALOAD, 0);
|
mv.visitVarInsn(ALOAD, 0);
|
||||||
mv.visitVarInsn(ALOAD, 2);
|
mv.visitVarInsn(ALOAD, 2);
|
||||||
if (paramClasses.length <= 5) { //参数总数量
|
if (paramClasses.length <= 5) { //参数总数量
|
||||||
@@ -353,7 +353,7 @@ public final class SncpDynServlet extends SncpServlet {
|
|||||||
}
|
}
|
||||||
mv.visitInsn(AASTORE);
|
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方法 --------------------------------
|
//-------------------------直接返回 或者 调用convertTo方法 --------------------------------
|
||||||
int maxStack = codes.length > 0 ? codes[codes.length - 1][1] : 1;
|
int maxStack = codes.length > 0 ? codes[codes.length - 1][1] : 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user