Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The matching wildcard is strict, but no declaration can be found for element 'tx:annotation-driven'

I am trying to configure JSF+Spring+hibernate and I'm tying to run a test but when I use this "tx:annotation-driven" on my application-context.xml file, I get this error:

The matching wildcard is strict, but no declaration can be found for element 'tx:annotation-driven'

Here is my application-context.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:aop="http://www.springframework.org/schema/aop"        xmlns:context="http://www.springframework.org/schema/context"        xmlns:tx="http://www.springframework.org/schema/tx"         xsi:schemaLocation="http://www.springframework.org/schema/beans            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd           http://www.springframework.org/schema/aop            http://www.springframework.org/schema/aop/spring-aop-2.5.6.xsd           http://www.springframework.org/schema/context            http://www.springframework.org/schema/context/spring-context-2.5.6.xsd           http://www.springframework.org/schema/tx            http://www.springframework.org/schema/tx/spring-tx-2.5.6.xsd " xmlns:tool="http://www.springframework.org/schema/tool">     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">         <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>         <property name="url" value="jdbc:oracle:thin:@192.168.56.101:1521:Gpsi"/>         <property name="username" value="omar"/>         <property name="password" value="omar"/>     </bean>      <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">        <property name="dataSource" ref="dataSource"/>        <property name="annotatedClasses">             <list>                 <value>om.mycompany.model.Course</value>                 <value>om.mycompany.model.Student</value>                 <value>om.mycompany.model.Teacher</value>             </list>        </property>        <property name="hibernateProperties">             <props>                 <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>             </props>        </property>      </bean>     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">        <property name="sessionFactory" ref="sessionFactory"/>     </bean>     <tx:annotation-driven transaction.manager="transactionManager"/>      <context:annotation-config/>     <context:component-scan base.package="com.mmycompany"/> </beans> 

and here is my CourseServiceImplTest. I have still not implemented the tests:

public class CourseServiceImplTest {      private static ClassPathXmlApplicationContext context;     private static CourseService courseService;     public CourseServiceImplTest() {     }      @BeforeClass     public static void setUpClass() throws Exception {         context=new ClassPathXmlApplicationContext("application-context.xml");         courseService=(CourseService) context.getBean("courseService");     }      @AfterClass     public static void tearDownClass() throws Exception {         context.close();     }      @Before     public void setUp() {     }      @After     public void tearDown() {     }      /**      * Test of getAllCourses method, of class CourseServiceImpl.      */     @Test     public void testGetAllCourses() {         System.out.println("getAllCourses");         CourseServiceImpl instance = new CourseServiceImpl();         List expResult = null;         List result = instance.getAllCourses();         assertEquals(expResult, result);         // TODO review the generated test code and remove the default call to fail.         fail("The test case is a prototype.");     }      /**      * Test of getCourse method, of class CourseServiceImpl.      */     @Test     public void testGetCourse() {         System.out.println("getCourse");         Integer id = null;         CourseServiceImpl instance = new CourseServiceImpl();         Course expResult = null;         Course result = instance.getCourse(id);         assertEquals(expResult, result);         // TODO review the generated test code and remove the default call to fail.         fail("The test case is a prototype.");     } 

and here is the CourseServiceImpl:

@Service("courseService") @Transactional public class CourseServiceImpl implements CourseService{      @Autowired     private SessionFactory sessionFactory;     @Override     public List<Course> getAllCourses() {         return sessionFactory.getCurrentSession().createQuery("from Course").list();         }      @Override     public Course getCourse(Integer id) {         return (Course) sessionFactory.getCurrentSession().get(Course.class, id);     }      @Override     public void save(Course course) {        sessionFactory.getCurrentSession().saveOrUpdate(course);     }  } 
like image 792
cascadox Avatar asked May 19 '11 11:05

cascadox


2 Answers

You have some errors in your appcontext.xml:

  • Use *-2.5.xsd

    xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   http://www.springframework.org/schema/aop    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd   http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context-2.5.xsd   http://www.springframework.org/schema/tx    http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" 
  • Typos in tx:annotation-driven and context:component-scan (. instead of -)

    <tx:annotation-driven transaction-manager="transactionManager" /> <context:component-scan base-package="com.mmycompany" /> 
like image 150
abalogh Avatar answered Sep 16 '22 15:09

abalogh


This is for others (like me :) ). Don't forget to add the spring tx jar/maven dependency. Also correct configuration in appctx is:

xmlns:tx="http://www.springframework.org/schema/tx" 

xsi:schemaLocation="http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"

, by mistake wrong configuration which others may have

xmlns:tx="http://www.springframework.org/schema/tx/spring-tx-3.1.xsd" 

i.e., extra "/spring-tx-3.1.xsd"

xsi:schemaLocation="http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"

in other words what is there in xmlns(namespace) should have proper mapping in schemaLocation (namespace vs schema).

namespace here is : http://www.springframework.org/schema/tx

schema Doc Of namespace is : http://www.springframework.org/schema/tx/spring-tx-3.1.xsd

this schema of namespace later is mapped in jar to locate the path of actual xsd located in org.springframework.transaction.config

like image 23
dillip pattnaik Avatar answered Sep 18 '22 15:09

dillip pattnaik