/** * 构造能够正确匹配出到所给模块请求的控制器和方法的引擎,返回到相应 {@link InvocationBean}对象的模块引擎. * * @param module * @throws NullPointerException 如果所传入的模块为空时 */ public ModuleEngine(Module module) { if (module == null) { throw new NullPointerException("module"); } this.module = module; this.multipartResolver = initMultipartResolver(module.getApplicationContext()); }
sb.append("<tr><td>mappingPath</td><td>").append(module.getMappingPath()).append( "</td></tr>"); sb.append("<tr><td>relativePackagePath</td><td>").append(module.getRelativePath()).append( "</td></tr>"); sb.append("<tr valign=\"top\"><td>url</td><td>").append(module.getUrl()).append( "</td></tr>"); sb.append("<tr valign=\"top\"><td>controllers</td><td>"); for (ControllerRef controller : module.getControllers()) { sb.append("'").append(Arrays.toString(controller.getMappingPaths())).append("'=") .append(controller.getControllerClass().getName()).append(";<br>"); Arrays.toString(module.getCustomerResolvers().toArray())).append("</td></tr>"); Arrays.toString(module.getValidators().toArray())).append("</td></tr>"); Arrays.toString(module.getInterceptors().toArray())).append("</td></tr>"); module.getErrorHandler() == null ? "" : module.getErrorHandler()).append( "</td></tr>");
@Override public Object onError(Invocation inv, Throwable ex) throws Throwable { InvocationBean invb = (InvocationBean) inv; Module module = invb.getModule(); while ((module = module.getParent()) != null) { ControllerErrorHandler handler; if ((handler = module.getErrorHandler()) != null) { return handler.onError(invb, ex); } } throw ex; }
module.getApplicationContext()); ControllerErrorHandler errorHandler = errorHandlerModule.getErrorHandler(); while (errorHandler == null && errorHandlerModule != null) { errorHandlerModule = errorHandlerModule.getParent(); if (errorHandlerModule != null) { errorHandler = errorHandlerModule.getErrorHandler(); if (errorHandler != null) { if (errorHandler.getClass().isAnnotationPresent(NotForSubModules.class)) {
private void addModule(final MappingNode rootNode, Module module) { List<Mapping> terms = MappingFactory.parse(module.getMappingPath()); LinkedEngine rootEngine = rootNode.getMiddleEngines().getEngines(ReqMethod.GET)[0]; MappingNode parent = rootNode; for (Mapping mapping : terms) { if (mapping.getDefinition().length() == 0) { continue; } MappingNode temp = parent.getChild(mapping.getDefinition()); if (temp == null) { temp = new MappingNode(mapping); parent.linkAsChild(temp); } parent = temp; } LinkedEngine moduleEngine = new LinkedEngine(rootEngine, new ModuleEngine(module), parent); parent.getMiddleEngines().addEngine(ReqMethod.ALL, moduleEngine); // controllers List<ControllerRef> controllers = module.getControllers(); for (ControllerRef controller : controllers) { addController(module, parent, moduleEngine, controller); } }
private MethodParameterResolver compileParamResolvers() { ParameterNameDiscovererImpl parameterNameDiscoverer = new ParameterNameDiscovererImpl(); ResolverFactoryImpl resolverFactory = new ResolverFactoryImpl(); for (ParamResolver resolver : module.getCustomerResolvers()) { resolverFactory.addCustomerResolver(resolver); } return new MethodParameterResolver(this.controllerClass, method, parameterNameDiscoverer, resolverFactory); }
/** * 返回该module engine的映射地址 */ @Override public String toString() { //return this.multipartResolverodule.getMappingPath(); return this.module.getUrl().toString(); }
@SuppressWarnings("unchecked") private ParamValidator[] compileValidators() { Class[] parameterTypes = method.getParameterTypes(); List<ParamValidator> validators = module.getValidators(); ParamValidator[] registeredValidators = new ParamValidator[parameterTypes.length]; for (int i = 0; i < parameterTypes.length; i++) { for (ParamValidator validator : validators) { if (validator.supports(methodParameterResolver.getParamMetaDatas()[i])) { registeredValidators[i] = validator; break; } } } // return registeredValidators; }
viewName = viewName.substring(RoseConstants.VIEWS_PATH_WITH_END_SEP.length()); } else { viewRelativePath = inv.getViewModule().getRelativePath();
private InterceptorDelegate[] compileInterceptors() { List<InterceptorDelegate> interceptors = module.getInterceptors(); List<InterceptorDelegate> registeredInterceptors = new ArrayList<InterceptorDelegate>( interceptors.size());
module.getApplicationContext()); ControllerErrorHandler errorHandler = errorHandlerModule.getErrorHandler(); while (errorHandler == null && errorHandlerModule != null) { errorHandlerModule = errorHandlerModule.getParent(); if (errorHandlerModule != null) { errorHandler = errorHandlerModule.getErrorHandler(); if (errorHandler != null) { if (errorHandler.getClass().isAnnotationPresent(NotForSubModules.class)) {
private void addModule(final MappingNode rootNode, Module module) { List<Mapping> terms = MappingFactory.parse(module.getMappingPath()); LinkedEngine rootEngine = rootNode.getMiddleEngines().getEngines(ReqMethod.GET)[0]; MappingNode parent = rootNode; for (Mapping mapping : terms) { if (mapping.getDefinition().length() == 0) { continue; } MappingNode temp = parent.getChild(mapping.getDefinition()); if (temp == null) { temp = new MappingNode(mapping); parent.linkAsChild(temp); } parent = temp; } LinkedEngine moduleEngine = new LinkedEngine(rootEngine, new ModuleEngine(module), parent); parent.getMiddleEngines().addEngine(ReqMethod.ALL, moduleEngine); // controllers List<ControllerRef> controllers = module.getControllers(); for (ControllerRef controller : controllers) { addController(module, parent, moduleEngine, controller); } }
private MethodParameterResolver compileParamResolvers() { ParameterNameDiscovererImpl parameterNameDiscoverer = new ParameterNameDiscovererImpl(); ResolverFactoryImpl resolverFactory = new ResolverFactoryImpl(); for (ParamResolver resolver : module.getCustomerResolvers()) { resolverFactory.addCustomerResolver(resolver); } return new MethodParameterResolver(this.controllerClass, method, parameterNameDiscoverer, resolverFactory); }
/** * 返回该module engine的映射地址 */ @Override public String toString() { //return this.multipartResolverodule.getMappingPath(); return this.module.getUrl().toString(); }
@SuppressWarnings("unchecked") private ParamValidator[] compileValidators() { Class[] parameterTypes = method.getParameterTypes(); List<ParamValidator> validators = module.getValidators(); ParamValidator[] registeredValidators = new ParamValidator[parameterTypes.length]; for (int i = 0; i < parameterTypes.length; i++) { for (ParamValidator validator : validators) { if (validator.supports(methodParameterResolver.getParamMetaDatas()[i])) { registeredValidators[i] = validator; break; } } } // return registeredValidators; }
viewName = viewName.substring(RoseConstants.VIEWS_PATH_WITH_END_SEP.length()); } else { viewRelativePath = inv.getViewModule().getRelativePath();
private InterceptorDelegate[] compileInterceptors() { List<InterceptorDelegate> interceptors = module.getInterceptors(); List<InterceptorDelegate> registeredInterceptors = new ArrayList<InterceptorDelegate>( interceptors.size());
final Module module = modules.get(i); sb.append("module ").append(i + 1).append(":"); sb.append("\n\tmappingPath='").append(module.getMappingPath()); sb.append("';\n\tpackageRelativePath='").append(module.getRelativePath()); sb.append("';\n\turl='").append(module.getUrl()); sb.append("';\n\tcontrollers=["); final List<ControllerRef> controllerMappings = module.getControllers(); for (ParamResolver resolver : module.getCustomerResolvers()) { sb.append(resolver.getClass().getSimpleName()).append(", "); if (module.getCustomerResolvers().size() > 0) { sb.setLength(sb.length() - 2); for (ParamValidator validator : module.getValidators()) { sb.append(validator.getClass().getSimpleName()).append(", "); if (module.getValidators().size() > 0) { sb.setLength(sb.length() - 2); for (InterceptorDelegate interceptor : module.getInterceptors()) { sb.append(interceptor.getName()).append("(").append(interceptor.getPriority()) .append("), "); if (module.getInterceptors().size() > 0) { sb.setLength(sb.length() - 2); module.getErrorHandler() == null ? "<null>" : module.getErrorHandler()); sb.append("\n\n");
public void destroy() { WebApplicationContext applicationContext = module.getApplicationContext(); if (applicationContext instanceof AbstractApplicationContext) { ((AbstractApplicationContext) applicationContext).close(); } }
@Override public Object onError(Invocation inv, Throwable ex) throws Throwable { InvocationBean invb = (InvocationBean) inv; Module module = invb.getModule(); while ((module = module.getParent()) != null) { ControllerErrorHandler handler; if ((handler = module.getErrorHandler()) != null) { return handler.onError(invb, ex); } } throw ex; }