【问题标题】:The matching wildcard is strict, but no declaration can be found for element 'tx:annotation-driven'匹配的通配符是严格的,但找不到元素 'tx:annotation-driven' 的声明
【发布时间】:2011-08-28 19:39:57
【问题描述】:

我正在尝试配置 JSF+Spring+hibernate,并且正在尝试运行测试,但是当我在 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。我还没有实现测试:

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

}

【问题讨论】:

    标签: spring transactions spring-transactions


    【解决方案1】:

    在我的情况下,这实际上是托管在 AWS 上的服务器的症状,缺少外部网络的 IP。它会尝试从 springframework.org 下载命名空间并且无法建立连接。

    【讨论】:

      【解决方案2】:
      Any one can help for me!!!!!!!!!
      <?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:jee="http://www.springframework.org/schema/jee"
              xmlns:lang="http://www.springframework.org/schema/lang"
              xmlns:p="http://www.springframework.org/schema/p"
              xmlns:tx="http://www.springframework.org/schema/tx"
              xmlns:util="http://www.springframework.org/schema/util"
              xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                  http://www.springframework.org/schema/aop/ http://www.springframework.org/schema/aop/spring-aop.xsd
                  http://www.springframework.org/schema/context/ http://www.springframework.org/schema/context/spring-context.xsd
                  http://www.springframework.org/schema/jee/ http://www.springframework.org/schema/jee/spring-jee.xsd
                  http://www.springframework.org/schema/lang/ http://www.springframework.org/schema/lang/spring-lang.xsd
                  http://www.springframework.org/schema/tx/ http://www.springframework.org/schema/tx/spring-tx.xsd
                  http://www.springframework.org/schema/util/ http://www.springframework.org/schema/util/spring-util.xsd">
              <context:annotation-config />(ERROR OCCUR)
              <context:component-scan base-package="hiberrSpring" /> (ERROR OCCUR)
              <bean id="jspViewResolver"
                  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                  <property name="viewClass"
                      value="org.springframework.web.servlet.view.JstlView"></property>
                  <property name="prefix" value="/WEB-INF/"></property>
                  <property name="suffix" value=".jsp"></property>
              </bean>
              <bean id="messageSource"
                  class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
                  <property name="basename" value="classpath:messages"></property>
                  <property name="defaultEncoding" value="UTF-8"></property>
              </bean>
              <bean id="propertyConfigurer"
                  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
                  p:location="/WEB-INF/jdbc.properties"></bean>
              <bean id="dataSource"
                  class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
                  p:driverClassName="${com.mysql.jdbc.Driver}"
                  p:url="${jdbc:mysql://localhost/}" p:username="${root}"
                  p:password="${rajini}"></bean>
              <bean id="sessionFactory"
                  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                  <property name="dataSource" ref="dataSource"></property>
                  <property name="configLocation">
                      <value>classpath:hibernate.cfg.xml</value>
                  </property>
                  <property name="configurationClass">
                      <value>org.hibernate.cfg.AnnotationConfiguration</value>
                  </property>
                  <property name="hibernateProperties">
                      <props>
                          <prop key="hibernate.dialect">${org.hibernate.dialect.MySQLDialect}</prop>
                          <prop key="hibernate.show_sql">true</prop>
                      </props>
                  </property>
              </bean>
              <bean id="employeeDAO" class="hiberrSpring.EmployeeDaoImpl"></bean>
              <bean id="employeeManager" class="hiberrSpring.EmployeeManagerImpl"></bean>
              <tx:annotation-driven /> (ERROR OCCUR)
              <bean id="transactionManager"
                  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                  <property name="sessionFactory" ref="sessionFactory"></property>
              </bean>
          </beans>
      

      【讨论】:

        【解决方案3】:

        我正在向 udemy 学习。我按照老师教我做的每一个步骤去做。 在 spring 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,即 spring-mvc-4.2.xsd 和 spring-tx-4.2.xsd

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

        【讨论】:

          【解决方案4】:

          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
          

          确实,少/多一个字符可以让程序员忙上几个小时!

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              【解决方案6】:

              FWIW 我遇到了同样的问题。结果我的 xsi:schemaLocation 条目不正确,所以我去了官方文档并将它们粘贴到我的:

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

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

              【讨论】:

                【解决方案7】:

                对我来说,有效的是命名空间在 xsi:schemaLocation 标签中定义的顺序:[因为版本很好,而且它已经是事务管理器]

                错误在于:

                 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"
                

                【讨论】:

                【解决方案8】:

                这是给其他人的(比如我:))。不要忘记添加 spring tx jar/maven 依赖项。 appctx 中的正确配置是:

                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"

                ,错误的配置,其他人可能有

                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(命名空间与架构)。

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

                命名空间的模式文档是:http://www.springframework.org/schema/tx/spring-tx-3.1.xsd

                这个命名空间模式稍后会映射到 jar 中,以定位位于 org.springframework.transaction.config 中的实际 xsd 的路径

                【讨论】:

                • 添加一些 spring 依赖项为我修复了它。谢谢!
                • 这个答案的写法让人很难理解
                【解决方案9】:

                您的 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"
                  
                • tx:annotation-drivencontext:component-scan 中的错字(. 而不是 -)

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

                【讨论】:

                  猜你喜欢
                  • 2016-04-19
                  • 1970-01-01
                  • 2018-04-12
                  • 1970-01-01
                  • 2014-11-18
                  • 2018-03-21
                  • 1970-01-01
                  • 2012-08-26
                  • 2021-11-02
                  相关资源
                  最近更新 更多