private List<HandlerAdapter> extractAdapters() { List<HandlerAdapter> list = new ArrayList<HandlerAdapter>(); list.addAll(this.beanFactory.getBeansOfType(HandlerAdapter.class).values()); list.remove(this); AnnotationAwareOrderComparator.sort(list); return list; }
@Override public boolean supports(Object handler) { if (this.adapters == null) { this.adapters = extractAdapters(); } for (HandlerAdapter mapping : this.adapters) { if (mapping.supports(handler)) { return true; } } return false; }
@Override public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (this.adapters == null) { this.adapters = extractAdapters(); } for (HandlerAdapter mapping : this.adapters) { if (mapping.supports(handler)) { return mapping.handle(request, response, handler); } } return null; }
@Override public long getLastModified(HttpServletRequest request, Object handler) { if (this.adapters == null) { this.adapters = extractAdapters(); } for (HandlerAdapter mapping : this.adapters) { if (mapping.supports(handler)) { return mapping.getLastModified(request, handler); } } return 0; }
@Test public void handlerAdaptersCreated() throws Exception { load(); assertThat(this.context.getBeanNamesForType(HandlerAdapter.class).length) .isEqualTo(3); assertThat(this.context.getBean(RequestMappingHandlerAdapter.class) .getMessageConverters()).isNotEmpty() .isEqualTo(this.context.getBean(HttpMessageConverters.class) .getConverters()); }
@Override protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException { if (handler instanceof HttpRequestHandler) { return new HttpRequestHandlerAdapter(); } else if (handler instanceof Controller) { Object unwrappedHandler = ClassLoaderUtils.unwrapFromProxy(handler); if (unwrappedHandler instanceof CXFServletControllerAdapter) { // TODO this just seems weird as this controller is initially null when it's created, does there need to be some synchronization here? ((CXFServletControllerAdapter)unwrappedHandler).setController(cxfServletController); } return new SimpleControllerHandlerAdapter(); } throw new RiceRuntimeException("handler of type " + handler.getClass().getName() + " is not known and can't be used by " + KSBDispatcherServlet.class.getName()); }
@Test public void handlerAdaptersCreated() throws Exception { load(); assertEquals(3, this.context.getBeanNamesForType(HandlerAdapter.class).length); assertFalse(this.context.getBean(RequestMappingHandlerAdapter.class) .getMessageConverters().isEmpty()); assertEquals(this.context.getBean(HttpMessageConverters.class).getConverters(), this.context.getBean(RequestMappingHandlerAdapter.class) .getMessageConverters()); }
/** * @see HandlerInterceptor#preHandle(HttpServletRequest,HttpServletResponse, Object) */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (request.getParameter(TableTagParameters.PARAMETER_EXPORTING) == null) { if (log.isDebugEnabled()) { log.debug(Messages.getString("ResponseOverrideFilter.parameternotfound")); //$NON-NLS-1$ } // don't intercept! return true; } BufferedResponseWrapper wrapper = new BufferedResponseWrapper13Impl(response); Map<String, Boolean> contentBean = new HashMap<String, Boolean>(4); if (buffer) { contentBean.put(TableTagParameters.BEAN_BUFFER, Boolean.TRUE); } request.setAttribute(TableTag.FILTER_CONTENT_OVERRIDE_BODY, contentBean); if (log.isDebugEnabled()) { log.debug("handler is " + handler); } HandlerAdapter handlerAdaptor = new SimpleControllerHandlerAdapter(); handlerAdaptor.handle(request, wrapper, handler); ExportDelegate.writeExport(response, request, wrapper); return false; }
@Bean public HandlerAdapter handlerAdapter() { return new RequestMappingHandlerAdapter(); }
@Bean HandlerAdapter handler(){ RequestMappingHandlerAdapter a = new RequestMappingHandlerAdapter(); return a; }