use of org.webpieces.router.impl.routeinvoker.InvokeInfo in project webpieces by deanhiller.
the class FHtmlRouter method invoke.
@Override
public RouterStreamRef invoke(RequestContext ctx, ProxyStreamHandle handler) {
RouteData data = new RouteInfoForHtml(isCheckSecureToken, matchInfo.getHttpMethod());
InvokeInfo invokeInfo = new InvokeInfo(ctx, handler, RouteType.HTML, loadedController, i18nBundleName);
return invoker.invokeHtmlController(invokeInfo, dynamicInfo, data);
}
use of org.webpieces.router.impl.routeinvoker.InvokeInfo in project webpieces by deanhiller.
the class DevRouteInvoker method invokeNotFound.
/**
* This one is definitely special
*/
@Override
public XFuture<Void> invokeNotFound(InvokeInfo invokeInfo, Endpoint info, RouteData data) {
// special case for if stuff didn't compile and we flag it
Throwable exc = (Throwable) invokeInfo.getRequestCtx().getRequest().requestState.get(ERROR_KEY);
if (exc != null) {
log.error("Could not compile your code", exc);
RouteInfoForInternalError error = new RouteInfoForInternalError(exc);
return invokeErrorController(invokeInfo, info, error);
}
RequestContext requestCtx = invokeInfo.getRequestCtx();
ProxyStreamHandle handler = invokeInfo.getHandler();
RouteInfoForNotFound notFoundData = (RouteInfoForNotFound) data;
NotFoundException notFoundExc = notFoundData.getNotFoundException();
RouterRequest req = requestCtx.getRequest();
if (notFoundData.getNotFoundException() == null) {
throw new IllegalArgumentException("must have not found exception to be here");
} else if (req.queryParams.containsKey(DevelopmentController.NOT_FOUND_KEY)) {
// This is a callback so render the original webapp developer's not found page into the iframe
return super.invokeNotFound(invokeInfo, info, data);
}
// ok, in dev mode, we hijack the not found page with one with a route list AND an iframe containing the developers original
// notfound page
log.error("(Development only log message) Route not found!!! Either you(developer) typed the wrong url OR you have a bad route. Either way,\n" + " something needs a'fixin. req=" + req, notFoundExc);
Injector webAppInjector = webInjector.getCurrentInjector();
RouteInfo routeInfo = new RouteInfo(new RouteModuleInfo("", null), "/org/webpieces/devrouter/impl/DevelopmentController.notFound");
SvcProxyFixedRoutes svcProxy = new SvcProxyFixedRoutes(serviceInvoker, futureUtil);
LoadedController newLoadedController = controllerFinder.loadGenericController(webAppInjector, routeInfo).getLoadedController();
Endpoint newInfo = new Endpoint(svcProxy);
String reason = "Your route was not found in routes table";
if (notFoundExc != null)
reason = notFoundExc.getMessage();
RouterRequest newRequest = new RouterRequest();
newRequest.putMultipart("webpiecesError", "Exception message=" + reason);
newRequest.putMultipart("url", req.relativePath);
newRequest.isHttps = req.isHttps;
newRequest.isBackendRequest = req.isBackendRequest;
newRequest.originalRequest = req.originalRequest;
newRequest.requestState.put(DevelopmentController.ORIGINAL_REQUEST, req);
ApplicationContext ctx = webInjector.getAppContext();
RequestContext overridenCtx = new RequestContext(requestCtx.getValidation(), (FlashSub) requestCtx.getFlash(), requestCtx.getSession(), newRequest, ctx);
InvokeInfo newInvokeInfo = new InvokeInfo(overridenCtx, handler, RouteType.NOT_FOUND, newLoadedController, null);
RequestContext oldContext = Current.getContext();
Current.setContext(overridenCtx);
try {
return super.invokeNotFound(newInvokeInfo, newInfo, data);
} finally {
Current.setContext(oldContext);
}
}
Aggregations