This commit is contained in:
@@ -158,7 +158,7 @@ public final class NodeHttpServer extends NodeServer {
|
||||
for (AnyValue item : restConf.getAnyValues("service")) {
|
||||
hasServices.add(item.getValue("value", ""));
|
||||
}
|
||||
|
||||
final boolean sncp = this.serverConf.getBoolValue("_$sncp", false); //SNCP服务以REST启动时会赋值_$sncp=true
|
||||
super.interceptorServiceWrappers.forEach((wrapper) -> {
|
||||
if (!wrapper.getName().isEmpty()) return; //只加载resourceName为空的service
|
||||
final Class stype = wrapper.getType();
|
||||
@@ -185,9 +185,9 @@ public final class NodeHttpServer extends NodeServer {
|
||||
if (!match) return;
|
||||
}
|
||||
|
||||
RestHttpServlet servlet = RestServletBuilder.createRestServlet(superClass, wrapper.getName(), stype);
|
||||
RestHttpServlet servlet = RestServletBuilder.createRestServlet(superClass, wrapper.getName(), stype, sncp);
|
||||
if (servlet == null) return;
|
||||
if(finest) logger.finest("Create RestServlet = "+servlet);
|
||||
if (finest) logger.finest("Create RestServlet = " + servlet);
|
||||
try {
|
||||
Field serviceField = servlet.getClass().getDeclaredField("_service");
|
||||
serviceField.setAccessible(true);
|
||||
|
||||
@@ -32,6 +32,7 @@ public final class NodeSncpServer extends NodeServer {
|
||||
|
||||
public static NodeServer createNodeServer(Application application, AnyValue serconf) {
|
||||
if (serconf != null && serconf.getAnyValue("rest") != null) {
|
||||
((AnyValue.DefaultAnyValue) serconf).addValue("_$sncp", "true");
|
||||
return new NodeHttpServer(application, serconf);
|
||||
}
|
||||
return new NodeSncpServer(application, serconf);
|
||||
|
||||
@@ -40,12 +40,13 @@ public final class RestServletBuilder {
|
||||
|
||||
public static String getWebModuleName(Class<? extends Service> serviceType) {
|
||||
final RestService controller = serviceType.getAnnotation(RestService.class);
|
||||
if (controller == null) return null;
|
||||
if (controller == null) return serviceType.getSimpleName().replaceAll("Service.*$", "").toLowerCase();
|
||||
if (controller.ignore()) return null;
|
||||
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 (!RestHttpServlet.class.isAssignableFrom(baseServletClass)) return null;
|
||||
int mod = baseServletClass.getModifiers();
|
||||
|
||||
@@ -15,6 +15,9 @@ import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 如果Resource(name = "$") 表示资源name采用所属对象的name
|
||||
* name规则:
|
||||
* 1: "$"有特殊含义, 不能表示"$"资源本身
|
||||
* 2: 只能是字母、数字、(短横)-、(下划线)_、点(.)的组合
|
||||
* <p>
|
||||
* 详情见: http://redkale.org
|
||||
*
|
||||
@@ -51,6 +54,12 @@ public final class ResourceFactory {
|
||||
this.store.clear();
|
||||
}
|
||||
|
||||
public void checkName(String name) {
|
||||
if (name == null || (!name.isEmpty() && !name.matches("^[a-zA-Z_\\-\\.]+$"))) {
|
||||
throw new IllegalArgumentException("Resource.name(" + name + ") contains illegal character, must be (a-z A-Z 0-9 _ . -)");
|
||||
}
|
||||
}
|
||||
|
||||
public <A> A register(final Class<? extends A> clazz, final A rs) {
|
||||
return register(true, clazz, rs);
|
||||
}
|
||||
@@ -141,6 +150,7 @@ public final class ResourceFactory {
|
||||
}
|
||||
|
||||
public <A> A register(final boolean autoSync, final String name, final A rs) {
|
||||
checkName(name);
|
||||
final Class<?> claz = rs.getClass();
|
||||
ResourceType rtype = claz.getAnnotation(ResourceType.class);
|
||||
if (rtype == null) {
|
||||
@@ -164,6 +174,7 @@ public final class ResourceFactory {
|
||||
}
|
||||
|
||||
public <A> A register(final boolean autoSync, final String name, final Type clazz, final A rs) {
|
||||
checkName(name);
|
||||
ConcurrentHashMap<String, ResourceEntry> map = this.store.get(clazz);
|
||||
if (map == null) {
|
||||
ConcurrentHashMap<String, ResourceEntry> sub = new ConcurrentHashMap();
|
||||
@@ -490,7 +501,7 @@ public final class ResourceFactory {
|
||||
m = method;
|
||||
m.setAccessible(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while ((loop = loop.getSuperclass()) != Object.class);
|
||||
listenerMethods.put(clazz, m);
|
||||
|
||||
Reference in New Issue
Block a user