This commit is contained in:
Redkale
2016-08-26 09:51:36 +08:00
parent dfacd49a70
commit 40ef40b813
4 changed files with 19 additions and 6 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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();

View File

@@ -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);