匹配的通配符是严格的,但是对元素“tx:annotation-driven”没有声明。

我正在尝试configurationJSF + Spring + hibernate,而我试图运行一个testing,但是当我在application-context.xml文件中使用这个“tx:annotation-driven”时,出现这个错误:

匹配的通配符是严格的,但是对元素“tx:annotation-driven”没有声明。

这是我的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> 

这是我的CourseServiceImplTest。 我还没有执行testing:

 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."); } 

这里是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); } } 

你的appcontext.xml中有一些错误:

  • 使用* -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" 
  • Tyx in tx:annotation-drivencontext:component-scan (。而不是 – )

     <tx:annotation-driven transaction-manager="transactionManager" /> <context:component-scan base-package="com.mmycompany" /> 

这是为了别人(像我:))。 不要忘记添加spring tx jar / maven依赖项。 在appctx中正确的configuration是:

 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"

,其他人可能有错误的configuration

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

即额外的“/spring-tx-3.1.xsd”

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

换句话说,xmlns(namespace)中有什么应该在schemaLocation(namespace vs schema)中有适当的映射。

命名空间是: http : //www.springframework.org/schema/tx

schema命名空间的Doc是: http : //www.springframework.org/schema/tx/spring-tx-3.1.xsd

这个命名空间的模式稍后在jar中映射,以find位于org.springframework.transaction.config中的实际xsd的path

对我来说,工作的东西是在xsi:schemaLocation标记中定义的命名空间的顺序:[因为版本是好的,也是事务pipe理器已经]

错误是:

  http://www.springframework.org/schema/mvc http://www.springframework.org/schema/tx http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/tx/spring-tx-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/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" 

FWIW我有这个相同的问题。 原来我的xsi:schemaLocation条目是不正确的,所以我去了官方的文档,并把它们粘贴到我的:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html第16.5.6节;

我不得不再添加一些,但是没关系。 接下来是找出为什么这个问题解决了…

确保Spring版本和xsd版本都是相同的。在我的情况下,我使用Spring 4.1.1,所以我所有的xsd应该是版本* -4.1.xsd

在tx和* .xml文件之前的一个额外的正斜杠(/)困扰了我8个小时!

我的错:

 http://www.springframework.org/schema/tx/ http://www.springframework.org/schema/tx/spring-tx-4.3.xsd 

更正:

 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd 

事实上,一个字符更less/更能够让程序员忙碌几个小时!

我从udemy学习。 我跟着我的老师让我做的每一步。 在设置开发环境的时候,在mvc的crud部分,我遇到了同样的错误:

 <mvc:annotation-driven/> and <tx:annotation-driven transaction-manager="myTransactionManager" /> 

那我就换了

  http://www.springframework.org/schema/mvc/spring-mvc.xsd 

  http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 

  http://www.springframework.org/schema/tx/spring-tx.xsd 

  http://www.springframework.org/schema/tx/spring-tx-4.2.xsd 

其实我访问了这两个网站http://www.springframework.org/schema/mvc/和http://www.springframework.org/schema/tx/ ,只是添加了最新版本的spring-mvc和spring-tx ie ,spring-mvc-4.2.xsd和spring-tx-4.2.xsd

所以,我build议尝试这个。 希望这可以帮助。 谢谢。