use of io.vertx.ext.web.Route in project mbed-cloud-sdk-java by ARMmbed.
the class TestServer method defineHelloRoute.
private void defineHelloRoute() {
Route route = router.route(HttpMethod.GET, "/").produces(APPLICATION_JSON);
route.handler(routingContext -> {
execute(200, routingContext, new ServerAction() {
@Override
public Object execute() throws Exception {
return engine.hello();
}
}, false);
});
}
use of io.vertx.ext.web.Route in project mbed-cloud-sdk-java by ARMmbed.
the class TestServer method defineRunInstanceMethodRoute.
private void defineRunInstanceMethodRoute() {
Route route = router.route(HttpMethod.POST, "/instances/:" + PARAM_INSTANCE + "/methods/:" + PARAM_METHOD).produces(APPLICATION_JSON);
route.blockingHandler(routingContext -> {
HttpServerRequest request = routingContext.request();
String instanceId = request.getParam(PARAM_INSTANCE);
String methodId = request.getParam(PARAM_METHOD);
Map<String, Object> methodArgs = fetchMethodArgs(routingContext.getBodyAsString());
execute(200, routingContext, new ServerAction() {
@Override
public Object execute() throws Exception {
logger.logInfo("TEST http://localhost:" + String.valueOf(port) + request.uri() + " AT " + new Date().toString());
APIMethodResult result = engine.callAPIOnInstance(instanceId, methodId, methodArgs);
if (!result.wasExceptionRaised()) {
return result.getResult();
}
logger.logDebug("RESULT error happened: " + result.getMetadata());
throw new APICallException(result);
}
}, true);
});
}
use of io.vertx.ext.web.Route in project mbed-cloud-sdk-java by ARMmbed.
the class TestServer method defineGetInstanceRoute.
private void defineGetInstanceRoute() {
Route route = router.route(HttpMethod.GET, "/instances/:" + PARAM_INSTANCE).produces(APPLICATION_JSON);
route.blockingHandler(routingContext -> {
String instanceId = routingContext.request().getParam(PARAM_INSTANCE);
execute(200, routingContext, new ServerAction() {
@Override
public Object execute() throws Exception {
return engine.fetchInstance(instanceId).toInstance();
}
}, false);
});
}
use of io.vertx.ext.web.Route in project mbed-cloud-sdk-java by ARMmbed.
the class TestServer method defineListModuleInstancesRoute.
private void defineListModuleInstancesRoute() {
Route route = router.route(HttpMethod.GET, "/modules/:" + PARAM_MODULE + "/instances").produces(APPLICATION_JSON);
route.blockingHandler(routingContext -> {
String moduleId = routingContext.request().getParam(PARAM_MODULE);
execute(200, routingContext, new ServerAction() {
@Override
public Object execute() throws Exception {
return engine.listModuleInstances(moduleId).stream().map(m -> m.toInstance()).collect(Collectors.toList());
}
}, false);
});
}
use of io.vertx.ext.web.Route in project VX-API-Gateway by EliMirren.
the class VxApiApplication method addRouteToRouter.
/**
* 通用给Router添加route
*
* @param api
* 配置信息
* @param router
* 要添加的router
* @param routeMaps
* 要添加的route集合
* @param result
* 结果
*/
public void addRouteToRouter(VxApis api, Router router, Map<String, List<Route>> routeMaps, Handler<AsyncResult<Boolean>> result) {
vertx.executeBlocking(fut -> {
// 存储部署的路由
List<Route> routes = new ArrayList<>();
// 流量限制处理器
if (api.getLimitUnit() != null) {
// 权限认证的route;
Route limitRoute = router.route();
initApiLimit(api, limitRoute);
routes.add(limitRoute);
}
// 入口参数检查
if (api.getEnterParam() != null) {
// 权限认证的route;
Route checkRoute = router.route();
initParamCheck(api, checkRoute);
routes.add(checkRoute);
}
// 认证处理器
if (api.getAuthOptions() != null) {
// 权限认证的route;
Route authRoute = router.route();
try {
initAuthHandler(api, authRoute);
routes.add(authRoute);
} catch (Exception e) {
authRoute.remove();
// 清空已经成功的路由
routes.forEach(r -> r.remove());
LOG.error("添加权限认证-->失败:" + e);
fut.fail(e);
return;
}
}
// 前置处理器
if (api.getBeforeHandlerOptions() != null) {
// 前置处理器的route;
Route beforeRoute = router.route();
try {
initBeforeHandler(api, beforeRoute);
routes.add(beforeRoute);
} catch (Exception e) {
LOG.error("添加前置处理器-->失败:" + e);
beforeRoute.remove();
// 清空已经成功的路由
routes.forEach(r -> r.remove());
fut.fail(e);
return;
}
}
// 检查是否有后置处理器,有next给后置处理器,如果没有则response
boolean isAfterHandler = api.getAfterHandlerOptions() != null;
// 添加与后台交互的中心处理器
Route serverRoute = router.route();
try {
initServerHandler(isAfterHandler, api, serverRoute);
routes.add(serverRoute);
} catch (Exception e) {
LOG.error("添加服务处理器-->失败:" + e);
serverRoute.remove();
// 清空已经成功的路由
routes.forEach(r -> r.remove());
fut.fail(e);
return;
}
// 后置处理器
if (isAfterHandler) {
// 前置处理器的route;
Route afterRoute = router.route();
try {
initAfterHandler(api, afterRoute);
routes.add(afterRoute);
} catch (Exception e) {
LOG.error("添加后置处理器-->失败:" + e);
afterRoute.remove();
// 清空已经成功的路由
routes.forEach(r -> r.remove());
fut.fail(e);
return;
}
}
// 添加异常处理器
Route exRoute = router.route();
initExceptionHanlder(api, exRoute);
routes.add(exRoute);
routeMaps.put(api.getApiName(), routes);
fut.complete();
if (LOG.isDebugEnabled()) {
LOG.debug(appName + ": 服务器创建API成功");
}
}, result);
}
Aggregations