0

I tried everything under the sun to get this working.. But to no avail.

Spring 3.0.5 Gradle Eclipse Jetty embedded

Its a simple controller. But I get No Handler Mapping message

web.xml

<display-name>Scheduling</display-name>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:/WEB-INF/spring/sch-rest.xml</param-value>
 </context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Spring MVC -->
<servlet>
    <servlet-name>scheduler</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:/WEB-INF/spring/sch-rest.xml</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>scheduler</servlet-name>
    <url-pattern>/mvc/*</url-pattern>
</servlet-mapping>

Controller:

package com.test.sch.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController {

   @RequestMapping(value="/job", method=RequestMethod.GET)
   @ResponseBody
   public String test(@RequestParam (value = "name", required = false) String name) throws Exception{

     System.out.println("name:" + name);
     return "Yes, I got it, " + name;
   }
}

sch-rest.xml

 <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:mvc="http://www.springframework.org/schema/mvc" 
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:aop="http://www.springframework.org/schema/aop"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

  <context:component-scan base-package="com.test.sch.controller"/>
  <mvc:annotation-driven />
  <context:annotation-config/>

</beans>

war contains this:

WEB=INF\
   classes
      com 
        test
          sch 
            controller
              TestController
   lib
     <all jars>
   spring
      sch-rest.xml
   web.xml

Jetty Log

2015-12-15 16:51:32 INFO  o.s.web.context.ContextLoader - Root WebApplicationContext: initialization started
2015-12-15 16:51:32 INFO  o.s.w.c.s.XmlWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Tue Dec 15 16:51:32 CST 2015]; root of context hierarchy
2015-12-15 16:51:32 DEBUG o.s.b.f.xml.XmlBeanDefinitionReader - Loaded 0 bean definitions from location pattern [classpath*:/WEB-INF/spring/sch-rest.xml]
2015-12-15 16:51:32 DEBUG o.s.w.c.s.XmlWebApplicationContext - Bean factory for Root WebApplicationContext: org.springframework.beans.factory.support.DefaultListableBeanFactory@239e8159: defining beans []; root of factory hierarchy
2015-12-15 16:51:32 DEBUG o.s.w.c.s.XmlWebApplicationContext - Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@2965524d]
2015-12-15 16:51:32 DEBUG o.s.w.c.s.XmlWebApplicationContext - Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org.springframework.context.event.SimpleApplicationEventMulticaster@245545e3]
2015-12-15 16:51:32 DEBUG o.s.u.c.s.UiApplicationContextUtils - Unable to locate ThemeSource with name 'themeSource': using default [org.springframework.ui.context.support.ResourceBundleThemeSource@609b7019]
2015-12-15 16:51:32 INFO  o.s.b.f.s.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@239e8159: defining beans []; root of factory hierarchy
2015-12-15 16:51:32 DEBUG o.s.w.c.s.XmlWebApplicationContext - Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [org.springframework.context.support.DefaultLifecycleProcessor@8384aed]
2015-12-15 16:51:32 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'lifecycleProcessor'
2015-12-15 16:51:32 DEBUG o.s.web.context.ContextLoader - Published root WebApplicationContext as ServletContext attribute with name [org.springframework.web.context.WebApplicationContext.ROOT]
2015-12-15 16:51:32 INFO  o.s.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 141 ms
2015-12-15 16:51:33 DEBUG o.s.web.servlet.DispatcherServlet - Initializing servlet 'scheduler'
2015-12-15 16:51:33 INFO  o.s.web.servlet.DispatcherServlet - FrameworkServlet 'scheduler': initialization started
2015-12-15 16:51:33 DEBUG o.s.web.servlet.DispatcherServlet - Servlet with name 'scheduler' will try to create custom WebApplicationContext context of class 'org.springframework.web.context.support.XmlWebApplicationContext', using parent context [Root WebApplicationContext: startup date [Tue Dec 15 16:51:32 CST 2015]; root of context hierarchy]
2015-12-15 16:51:33 INFO  o.s.w.c.s.XmlWebApplicationContext - Refreshing WebApplicationContext for namespace 'scheduler-servlet': startup date [Tue Dec 15 16:51:33 CST 2015]; parent: Root WebApplicationContext
2015-12-15 16:51:33 DEBUG o.s.b.f.xml.XmlBeanDefinitionReader - Loaded 0 bean definitions from location pattern [classpath*:/WEB-INF/spring/sch-rest.xml]
2015-12-15 16:51:33 DEBUG o.s.w.c.s.XmlWebApplicationContext - Bean factory for WebApplicationContext for namespace 'scheduler-servlet': org.springframework.beans.factory.support.DefaultListableBeanFactory@6fbf1be2: defining beans []; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@239e8159
2015-12-15 16:51:33 DEBUG o.s.w.c.s.XmlWebApplicationContext - Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@7cd95e35]
2015-12-15 16:51:33 DEBUG o.s.w.c.s.XmlWebApplicationContext - Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org.springframework.context.event.SimpleApplicationEventMulticaster@22b8299c]
2015-12-15 16:51:33 DEBUG o.s.u.c.s.UiApplicationContextUtils - Unable to locate ThemeSource with name 'themeSource': using default [org.springframework.ui.context.support.DelegatingThemeSource@68b3d292]
2015-12-15 16:51:33 INFO  o.s.b.f.s.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@6fbf1be2: defining beans []; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@239e8159
2015-12-15 16:51:33 DEBUG o.s.w.c.s.XmlWebApplicationContext - Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [org.springframework.context.support.DefaultLifecycleProcessor@75c5a4f1]
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'lifecycleProcessor'
2015-12-15 16:51:33 DEBUG o.s.web.servlet.DispatcherServlet - Unable to locate MultipartResolver with name 'multipartResolver': no multipart request handling provided
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver'
2015-12-15 16:51:33 DEBUG o.s.web.servlet.DispatcherServlet - Unable to locate LocaleResolver with name 'localeResolver': using default [org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver@6685657]
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.springframework.web.servlet.theme.FixedThemeResolver'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.springframework.web.servlet.theme.FixedThemeResolver'
2015-12-15 16:51:33 DEBUG o.s.web.servlet.DispatcherServlet - Unable to locate ThemeResolver with name 'themeResolver': using default [org.springframework.web.servlet.theme.FixedThemeResolver@1d8c8631]
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping'
2015-12-15 16:51:33 DEBUG o.s.w.s.h.BeanNameUrlHandlerMapping - Looking for URL mappings in application context: WebApplicationContext for namespace 'scheduler-servlet': startup date [Tue Dec 15 16:51:33 CST 2015]; parent: Root WebApplicationContext
2015-12-15 16:51:33 DEBUG o.s.w.s.h.BeanNameUrlHandlerMapping - Rejected bean name 'servletConfig': no URL paths identified
2015-12-15 16:51:33 DEBUG o.s.w.s.h.BeanNameUrlHandlerMapping - Rejected bean name 'messageSource': no URL paths identified
2015-12-15 16:51:33 DEBUG o.s.w.s.h.BeanNameUrlHandlerMapping - Rejected bean name 'applicationEventMulticaster': no URL paths identified
2015-12-15 16:51:33 DEBUG o.s.w.s.h.BeanNameUrlHandlerMapping - Rejected bean name 'lifecycleProcessor': no URL paths identified
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping'
2015-12-15 16:51:33 DEBUG o.s.w.s.m.a.DefaultAnnotationHandlerMapping - Looking for URL mappings in application context: WebApplicationContext for namespace 'scheduler-servlet': startup date [Tue Dec 15 16:51:33 CST 2015]; parent: Root WebApplicationContext
2015-12-15 16:51:33 DEBUG o.s.w.s.m.a.DefaultAnnotationHandlerMapping - Rejected bean name 'servletConfig': no URL paths identified
2015-12-15 16:51:33 DEBUG o.s.w.s.m.a.DefaultAnnotationHandlerMapping - Rejected bean name 'messageSource': no URL paths identified
2015-12-15 16:51:33 DEBUG o.s.w.s.m.a.DefaultAnnotationHandlerMapping - Rejected bean name 'applicationEventMulticaster': no URL paths identified
2015-12-15 16:51:33 DEBUG o.s.w.s.m.a.DefaultAnnotationHandlerMapping - Rejected bean name 'lifecycleProcessor': no URL paths identified
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping'
2015-12-15 16:51:33 DEBUG o.s.web.servlet.DispatcherServlet - No HandlerMappings found in servlet 'scheduler': using default
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter'
2015-12-15 16:51:33 DEBUG o.s.web.servlet.DispatcherServlet - No HandlerAdapters found in servlet 'scheduler': using default
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver'
2015-12-15 16:51:33 DEBUG o.s.web.servlet.DispatcherServlet - No HandlerExceptionResolvers found in servlet 'scheduler': using default
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator'
2015-12-15 16:51:33 DEBUG o.s.web.servlet.DispatcherServlet - Unable to locate RequestToViewNameTranslator with name 'viewNameTranslator': using default [org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator@42208e15]
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.springframework.web.servlet.view.InternalResourceViewResolver'
2015-12-15 16:51:33 DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.springframework.web.servlet.view.InternalResourceViewResolver'
2015-12-15 16:51:33 DEBUG o.s.web.servlet.DispatcherServlet - No ViewResolvers found in servlet 'scheduler': using default
2015-12-15 16:51:33 DEBUG o.s.web.servlet.DispatcherServlet - Published WebApplicationContext of servlet 'scheduler' as ServletContext attribute with name [org.springframework.web.servlet.FrameworkServlet.CONTEXT.scheduler]
2015-12-15 16:51:33 INFO  o.s.web.servlet.DispatcherServlet - FrameworkServlet 'scheduler': initialization completed in 141 ms
2015-12-15 16:51:33 DEBUG o.s.web.servlet.DispatcherServlet - Servlet 'scheduler' configured successfully

Update 1:

Removed the following from web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:/WEB-INF/spring/sch-rest.xml</param-value>
 </context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Kevin Rave
  • 13,876
  • 35
  • 109
  • 173

1 Answers1

1

The first thing you should do is remove your ContextLoaderListener declaration and its context-param configuration. Currently, you're trying to load the sch-rest.xml file twice, once for the ContextLoaderListener's WebApplicationContext and once for the DispatcherServlet's. This is unnecessary, redundant, and might actually cause problems while registering @Controller handler methods. Read more about the differences between these two, here:

You currently have the following

<init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:/WEB-INF/spring/sch-rest.xml</param-value>
</init-param>

The prefix classpath*: is a wildcard prefix that tries to load any and all classpath resources that it finds at the path specified and it won't error out if it doesn't find any. That's likely what's happening here.

Your program is laid out like

WEB=INF\
   [...]
   spring
      sch-rest.xml

and I find it very unlikely that the above is on your classpath.

You can simply specify (without the classpath*:)

<init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/sch-rest.xml</param-value>
</init-param>

and Spring MVC will use the ServletContext to resolve the configuration.

Community
  • 1
  • 1
Sotirios Delimanolis
  • 274,122
  • 60
  • 696
  • 724