Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping'
Solution 1
Probably you have forgot to import your product-servlet to configuration class
you could move your product-servlet.xml to 'resources' so that it is available in classpath
so your servlet mapping looks like this
<servlet>
<servlet-name>product</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/product-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>product</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
in your config class
@Configuration
@EnableTransactionManagement
@ComponentScan("com.kopylov.spring")
@PropertySource("classpath:/com/kopylov/spring/resources/app.properties")
@EnableJpaRepositories("com.kopylov.spring.repository")
@ImportResource("classpath:/product-servlet.xml")
public class DataConfig {
//..
}
BTW, better not to mix match xml and java configuration. As java config has become norm, you could use WebMvcConfigurerAdapter
http://www.mkyong.com/spring-mvc/gradle-spring-4-mvc-hello-world-example-annotation/
Solution 2
Perfect solution worked for me :
Add commons-configuration-1.6.jar to the lib directory
kopylov
Updated on April 27, 2021Comments
-
kopylov about 3 years
Use jdk 1.8
- SpringMVC-4.3.3
- SpringCore-4.3.3
- javax.servlet-api-3.0.1
- spring-data-jpa:1.10.4
- hibernate-entitymanager:4.2.5.Final
- hibernate-core:4.2.5.Final
- Simple Logging Facade for Java:1.6.1
I encountered with such error
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotatedElementUtils.hasAnnotation
My question:
Why error encoured and how fix it?web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>product</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>product</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
product-servlet.xml
<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" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <context:component-scan base-package="com.kopylov.spring.controller" /> <mvc:annotation-driven/>
Controller
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ProductController { @RequestMapping public String showHome(){ return "home"; }
}
AppInitializer
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override protected Class<?>[] getRootConfigClasses(){ return new Class<?>[]{ DataConfig.class }; } @Override protected Class<?>[] getServletConfigClasses(){ return new Class<?>[0]; } @Override protected String[] getServletMappings(){ return new String[0]; }
}
DataConfig
@Configuration @EnableTransactionManagement @ComponentScan("com.kopylov.spring") @PropertySource("classpath:/com/kopylov/spring/resources/app.properties") @EnableJpaRepositories("com.kopylov.spring.repository") public class DataConfig { private static final String PROP_DATABASE_DRIVER = "db.driver"; private static final String PROP_DATABASE_PASSWORD = "db.password"; private static final String PROP_DATABASE_URL = "db.url"; private static final String PROP_DATABASE_USERNAME = "db.username"; private static final String PROP_HIBERNATE_DIALECT = "db.hibernate.dialect"; private static final String PROP_HIBERNATE_SHOW_SQL = "db.hibernate.dialect"; private static final String PROP_ENTITYMANAGER_PACKAGES_TO_SCAN = "db.entitymanager.packages.to.scan"; private static final String PROP_HIBERNATE_HBM2DDL_AUTO = "db.hibernate.hbm2ddl.auto"; @Resource private Environment env; @Bean public DataSource dataSource(){ DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(env.getRequiredProperty(PROP_DATABASE_DRIVER)); dataSource.setUrl(env.getRequiredProperty(PROP_DATABASE_URL)); dataSource.setUsername(env.getRequiredProperty(PROP_DATABASE_USERNAME)); dataSource.setPassword(env.getRequiredProperty(PROP_DATABASE_PASSWORD)); return dataSource; } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory(){ LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean(); emfb.setDataSource(dataSource()); emfb.setPersistenceProviderClass(HibernatePersistence.class); emfb.setPackagesToScan(env.getRequiredProperty(PROP_ENTITYMANAGER_PACKAGES_TO_SCAN)); emfb.setJpaProperties(getHibernateProperties()); return emfb; } @Bean public JpaTransactionManager transactionManager(){ JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); return transactionManager; } private Properties getHibernateProperties(){ Properties properties = new Properties(); properties.put(PROP_HIBERNATE_DIALECT, env.getRequiredProperty(PROP_HIBERNATE_DIALECT)); properties.put(PROP_HIBERNATE_SHOW_SQL, env.getRequiredProperty(PROP_HIBERNATE_SHOW_SQL)); properties.put(PROP_HIBERNATE_HBM2DDL_AUTO, env.getRequiredProperty(PROP_HIBERNATE_HBM2DDL_AUTO)); return properties; }