This commit is contained in:
@@ -38,6 +38,12 @@ public final class RestServletBuilder {
|
|||||||
private RestServletBuilder() {
|
private RestServletBuilder() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getWebModuleName(Class<? extends Service> serviceType) {
|
||||||
|
final RestService controller = serviceType.getAnnotation(RestService.class);
|
||||||
|
if (controller == null) 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) {
|
||||||
if (baseServletClass == null || serviceType == null) return null;
|
if (baseServletClass == null || serviceType == null) return null;
|
||||||
@@ -77,7 +83,7 @@ public final class RestServletBuilder {
|
|||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
final String defmodulename = (controller != null && !controller.value().isEmpty()) ? controller.value() : serviceType.getSimpleName().replaceAll("Service.*$", "").toLowerCase();
|
final String defmodulename = getWebModuleName(serviceType);
|
||||||
for (char ch : defmodulename.toCharArray()) {
|
for (char ch : defmodulename.toCharArray()) {
|
||||||
if (!((ch >= '0' && ch <= '9') || ch == '$' || ch == '_' || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))) { //不能含特殊字符
|
if (!((ch >= '0' && ch <= '9') || ch == '$' || ch == '_' || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))) { //不能含特殊字符
|
||||||
throw new RuntimeException(serviceType.getName() + " has illeal " + RestService.class.getSimpleName() + ".value, only 0-9 a-z A-Z _ $");
|
throw new RuntimeException(serviceType.getName() + " has illeal " + RestService.class.getSimpleName() + ".value, only 0-9 a-z A-Z _ $");
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ public final class SncpClient {
|
|||||||
|
|
||||||
protected final boolean finest = logger.isLoggable(Level.FINEST);
|
protected final boolean finest = logger.isLoggable(Level.FINEST);
|
||||||
|
|
||||||
protected final JsonConvert jsonConvert = JsonFactory.root().getConvert();
|
protected final JsonConvert convert = JsonFactory.root().getConvert();
|
||||||
|
|
||||||
protected final String name;
|
protected final String name;
|
||||||
|
|
||||||
@@ -261,7 +261,7 @@ public final class SncpClient {
|
|||||||
final SncpAction action = actions[index];
|
final SncpAction action = actions[index];
|
||||||
final CompletionHandler handlerFunc = action.handlerFuncParamIndex >= 0 ? (CompletionHandler) params[action.handlerFuncParamIndex] : null;
|
final CompletionHandler handlerFunc = action.handlerFuncParamIndex >= 0 ? (CompletionHandler) params[action.handlerFuncParamIndex] : null;
|
||||||
if (action.handlerFuncParamIndex >= 0) params[action.handlerFuncParamIndex] = null;
|
if (action.handlerFuncParamIndex >= 0) params[action.handlerFuncParamIndex] = null;
|
||||||
Future<byte[]> future = remote0(handlerFunc, bsonConvert, jsonConvert, transport, null, action, params);
|
SncpFuture<byte[]> future = remote0(handlerFunc, bsonConvert, jsonConvert, transport, null, action, params);
|
||||||
if (handlerFunc != null) return null;
|
if (handlerFunc != null) return null;
|
||||||
final BsonReader reader = bsonConvert.pollBsonReader();
|
final BsonReader reader = bsonConvert.pollBsonReader();
|
||||||
try {
|
try {
|
||||||
@@ -288,7 +288,18 @@ public final class SncpClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Future<byte[]> remote0(final CompletionHandler handler, final BsonConvert bsonConvert, final JsonConvert jsonConvert, final Transport transport, final SocketAddress addr0, final SncpAction action, final Object... params) {
|
private SncpFuture<byte[]> remote0(final CompletionHandler handler, final BsonConvert bsonConvert, final JsonConvert jsonConvert, final Transport transport, final SocketAddress addr0, final SncpAction action, final Object... params) {
|
||||||
|
if ("rest".equalsIgnoreCase(transport.getKind())) {
|
||||||
|
return remoteRest0(handler, jsonConvert, transport, addr0, action, params);
|
||||||
|
}
|
||||||
|
return remoteSncp0(handler, bsonConvert, transport, addr0, action, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
private SncpFuture<byte[]> remoteRest0(final CompletionHandler handler, final JsonConvert jsonConvert, final Transport transport, final SocketAddress addr0, final SncpAction action, final Object... params) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private SncpFuture<byte[]> remoteSncp0(final CompletionHandler handler, final BsonConvert bsonConvert, final Transport transport, final SocketAddress addr0, final SncpAction action, final Object... params) {
|
||||||
Type[] myparamtypes = action.paramTypes;
|
Type[] myparamtypes = action.paramTypes;
|
||||||
if (action.addressSourceParamIndex >= 0) params[action.addressSourceParamIndex] = this.clientAddress;
|
if (action.addressSourceParamIndex >= 0) params[action.addressSourceParamIndex] = this.clientAddress;
|
||||||
final BsonWriter writer = bsonConvert.pollBsonWriter(transport.getBufferSupplier()); // 将head写入
|
final BsonWriter writer = bsonConvert.pollBsonWriter(transport.getBufferSupplier()); // 将head写入
|
||||||
@@ -302,14 +313,14 @@ public final class SncpClient {
|
|||||||
final SocketAddress addr = addr0 == null ? (action.addressTargetParamIndex >= 0 ? (SocketAddress) params[action.addressTargetParamIndex] : null) : addr0;
|
final SocketAddress addr = addr0 == null ? (action.addressTargetParamIndex >= 0 ? (SocketAddress) params[action.addressTargetParamIndex] : null) : addr0;
|
||||||
final AsyncConnection conn = transport.pollConnection(addr);
|
final AsyncConnection conn = transport.pollConnection(addr);
|
||||||
if (conn == null || !conn.isOpen()) {
|
if (conn == null || !conn.isOpen()) {
|
||||||
logger.log(Level.SEVERE, action.method + " sncp (params: " + jsonConvert.convertTo(params) + ") cannot connect " + (conn == null ? addr : conn.getRemoteAddress()));
|
logger.log(Level.SEVERE, action.method + " sncp (params: " + convert.convertTo(params) + ") cannot connect " + (conn == null ? addr : conn.getRemoteAddress()));
|
||||||
throw new RuntimeException("sncp " + (conn == null ? addr : conn.getRemoteAddress()) + " cannot connect");
|
throw new RuntimeException("sncp " + (conn == null ? addr : conn.getRemoteAddress()) + " cannot connect");
|
||||||
}
|
}
|
||||||
final ByteBuffer[] sendBuffers = writer.toBuffers();
|
final ByteBuffer[] sendBuffers = writer.toBuffers();
|
||||||
fillHeader(sendBuffers[0], seqid, actionid, reqBodyLength);
|
fillHeader(sendBuffers[0], seqid, actionid, reqBodyLength);
|
||||||
|
|
||||||
final ByteBuffer buffer = transport.pollBuffer();
|
final ByteBuffer buffer = transport.pollBuffer();
|
||||||
final SncpFuture<byte[]> future = new SncpFuture();
|
final SncpFuture<byte[]> future = new SncpFuture(false);
|
||||||
conn.write(sendBuffers, sendBuffers, new CompletionHandler<Integer, ByteBuffer[]>() {
|
conn.write(sendBuffers, sendBuffers, new CompletionHandler<Integer, ByteBuffer[]>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -370,7 +381,7 @@ public final class SncpClient {
|
|||||||
final int respBodyLength = buffer.getInt();
|
final int respBodyLength = buffer.getInt();
|
||||||
final int retcode = buffer.getInt();
|
final int retcode = buffer.getInt();
|
||||||
if (retcode != 0) {
|
if (retcode != 0) {
|
||||||
logger.log(Level.SEVERE, action.method + " sncp (params: " + jsonConvert.convertTo(params) + ") deal error (retcode=" + retcode + ", retinfo=" + SncpResponse.getRetCodeInfo(retcode) + ")");
|
logger.log(Level.SEVERE, action.method + " sncp (params: " + convert.convertTo(params) + ") deal error (retcode=" + retcode + ", retinfo=" + SncpResponse.getRetCodeInfo(retcode) + ")");
|
||||||
throw new RuntimeException("remote service(" + action.method + ") deal error (retcode=" + retcode + ", retinfo=" + SncpResponse.getRetCodeInfo(retcode) + ")");
|
throw new RuntimeException("remote service(" + action.method + ") deal error (retcode=" + retcode + ", retinfo=" + SncpResponse.getRetCodeInfo(retcode) + ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -413,7 +424,7 @@ public final class SncpClient {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void failed(Throwable exc, Void attachment2) {
|
public void failed(Throwable exc, Void attachment2) {
|
||||||
logger.log(Level.SEVERE, action.method + " sncp (params: " + jsonConvert.convertTo(params) + ") remote read exec failed", exc);
|
logger.log(Level.SEVERE, action.method + " sncp (params: " + convert.convertTo(params) + ") remote read exec failed", exc);
|
||||||
future.set(new RuntimeException(action.method + " sncp remote exec failed"));
|
future.set(new RuntimeException(action.method + " sncp remote exec failed"));
|
||||||
transport.offerBuffer(buffer);
|
transport.offerBuffer(buffer);
|
||||||
transport.offerConnection(true, conn);
|
transport.offerConnection(true, conn);
|
||||||
@@ -427,7 +438,7 @@ public final class SncpClient {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void failed(Throwable exc, ByteBuffer[] attachment) {
|
public void failed(Throwable exc, ByteBuffer[] attachment) {
|
||||||
logger.log(Level.SEVERE, action.method + " sncp (params: " + jsonConvert.convertTo(params) + ") remote write exec failed", exc);
|
logger.log(Level.SEVERE, action.method + " sncp (params: " + convert.convertTo(params) + ") remote write exec failed", exc);
|
||||||
transport.offerBuffer(buffer);
|
transport.offerBuffer(buffer);
|
||||||
transport.offerConnection(true, conn);
|
transport.offerConnection(true, conn);
|
||||||
}
|
}
|
||||||
@@ -470,14 +481,22 @@ public final class SncpClient {
|
|||||||
|
|
||||||
private RuntimeException ex;
|
private RuntimeException ex;
|
||||||
|
|
||||||
public SncpFuture() {
|
private final boolean rest;
|
||||||
|
|
||||||
|
public SncpFuture(boolean rest) {
|
||||||
|
this.rest = rest;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SncpFuture(T result) {
|
public SncpFuture(boolean rest, T result) {
|
||||||
|
this.rest = rest;
|
||||||
this.result = result;
|
this.result = result;
|
||||||
this.done = true;
|
this.done = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isRest() {
|
||||||
|
return this.rest;
|
||||||
|
}
|
||||||
|
|
||||||
public void set(T result) {
|
public void set(T result) {
|
||||||
this.result = result;
|
this.result = result;
|
||||||
this.done = true;
|
this.done = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user