匹配的通配符是严格的,但是对元素“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-driven
和context: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议尝试这个。 希望这可以帮助。 谢谢。