web-dev-qa-db-fra.com

Le caractère générique correspondant est strict, mais aucune déclaration ne peut être trouvée pour l'élément 'tx: annotation-driven'

J'essaie de configurer JSF + Spring + hibernate et j'essaye d'exécuter un test, mais lorsque j'utilise ce "tx: annotation-driven" sur mon fichier application-context.xml, l'erreur suivante apparaît: 

Le caractère générique correspondant est strict, mais aucune déclaration ne peut être trouvée pour l'élément 'tx: annotation-driven' 

Voici mon 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>

et voici mon CourseServiceImplTest. Je n'ai toujours pas implémenté les 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.");
    }

et voici le 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);
    }

}
40
cascadox

Vous avez des erreurs dans votre appcontext.xml: 

  • Utilisez * -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 dans tx:annotation-driven et context:component-scan (. Au lieu de -)

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

C'est pour les autres (comme moi :)). N'oubliez pas d'ajouter la dépendance spring tx jar/maven . La configuration correcte dans appctx est également la suivante:

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"

, par erreur, mauvaise configuration que d’autres peuvent avoir

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

c'est-à-dire, 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"

en d'autres termes, ce qui est dans xmlns (namespace) devrait avoir le mappage approprié dans schemaLocation (namespace vs schema) .

l'espace de nom est ici: http://www.springframework.org/schema/tx

schema Doc De l'espace de noms est: http://www.springframework.org/schema/tx/spring-tx-3.1.xsd

ce schéma d’espace de nommage est mappé dans jar pour localiser le chemin du fichier xsd actuel situé dans org.springframework.transaction.config. 

13
dillip pattnaik

Pour moi, la chose qui a bien fonctionné a été l'ordre dans lequel les espaces de noms ont été définis dans la balise xsi: schemaLocation: 

L'erreur était avec:

 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"

ET RÉSOLU AVEC:

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"
10
Roshan Khandelwal

Une barre oblique supplémentaire (/) devant tx et le fichier * .xml m'ont troublée pendant 8 heures !!

Mon erreur:

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

Correction:

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

En effet, un personnage de moins/plus parvient à occuper les programmeurs pendant des heures!

1
Skandy

Dans mon cas, il s'agissait en fait d'un symptôme du serveur, hébergé sur AWS, dépourvu d'adresse IP pour le réseau externe. Il essaierait de télécharger des espaces de noms depuis springframework.org et ne parviendrait pas à établir une connexion.

1
capnmojo
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>
0
Saravana Kumaran

J'apprends d'udemy. J'ai suivi chaque étape que mon instructeur me demandait de faire ... Au printemps mvc, lors de la configuration de l'environnement de développement, j'avais la même erreur:

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

alors je viens de remplacer 

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

avec

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

et

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

avec

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

en fait, j’ai visité ces deux sites http://www.springframework.org/schema/mvc/ et http://www.springframework.org/schema/tx/ vient d'ajouter la dernière version de spring-mvc et spring-tx c'est-à-dire spring-mvc-4.2.xsd et spring-tx-4.2.xsd

Donc, je suggère d'essayer ceci . J'espère que cela aide. Je vous remercie.

0
Shafqat Shafi

FWIW J'ai eu le même problème. Mes entrées xsi: schemaLocation étaient incorrectes, alors je suis allé voir les documents officiels et les ai collés dans les miens:

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

Je devais en ajouter quelques autres, mais ça allait. La prochaine étape consiste à savoir pourquoi cela a résolu le problème ...

0

Assurez-vous que la version de Spring et la version de xsd sont les mêmes. Dans mon cas, j'utilise Spring 4.1.1, donc mon tout xsd doit être version * -4.1.xsd.

0
Divy Kumar