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