Bonjour à tous

Bon je me décide à me mettre à la page au niveau de spring 2.5 et développe un petit test de springDAO dont voici les sources :

applicationContext.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
<?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:context="http://www.springframework.org/schema/context" 
  xmlns:lang="http://www.springframework.org/schema/lang" 
  xmlns:p="http://www.springframework.org/schema/p"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
  http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd"> 
 
	<context:annotation-config />
	<context:component-scan base-package="com.testJAX.*" />
 
	<bean 	id="dataSource"
			class="org.apache.commons.dbcp.BasicDataSource"
			destroy-method="close"
			p:driverClassName="net.sourceforge.jtds.jdbc.Driver"
			p:url="jdbc:jtds:sybase://xxxx:xxxx"
			p:username="xxxx"
			p:password="xxxx" />
 
	<bean	id="transactionManager" 
			class="org.springframework.jdbc.datasource.DataSourceTransactionManager" 
    		p:dataSource-ref="dataSource" />
 
	<bean	id="jdbcTemplate"
			class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource"><ref bean="dataSource"/></property>
	</bean>
 
</beans>
Mon interface IGenericDAO :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
public interface IGenericDAO<T> {
 
	public List<T> select();
	public void insert(T e);
	public void update(T e);
	public void delete(T e);
 
}

Mon dao qui se nomme AppelDAO :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
@Repository
public class AppelDAO implements IGenericDAO<Appel>{
 
	protected SimpleJdbcTemplate jdbcTemplate;
 
	@Autowired
	public void setDataSource(DataSource dataSource) {
		jdbcTemplate = new SimpleJdbcTemplate(dataSource);
	}
 
	private static ParameterizedRowMapper<Appel> mapper = new ParameterizedRowMapper<Appel>() {
		public Appel mapRow(ResultSet rs, int rowNum) throws SQLException {
			Appel appel = new Appel();
			appel.setAppNum(rs.getInt("APP_NUM"));
			appel.setAppPB(rs.getString("APP_PB"));
			return appel;
		}
	};
 
	public List<Appel> select() {
		List<Appel> list = null;
		try {
			System.out.println("mapper " + mapper.getClass());
			list = jdbcTemplate.query("SELECT APP_NUM, APP_PB FROM HD_APPEL WHERE APP_NUM < 1000", mapper);
		} catch(Exception e) {
			e.printStackTrace();
		}
		return list;
	}
 
	public void delete(Appel a) {
		jdbcTemplate.update("delete from HD_APPEL WHERE APP_NUM = ?", a.getAppNum());
	}
 
	public void insert(Appel a) {
	}
 
	public void update(Appel a) {
		jdbcTemplate.update(
				"update HD_APPEL set APP_PB = ? WHERE APP_NUM = ?",
				a.getAppPB(), a.getAppNum());
	}
}
Mon service interrogeant le DAO
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
@Service
public class AppelService {
 
	private AppelDAO appelDAO;
 
	@Resource
	public void setDao(@Qualifier("appelDAO") IGenericDAO<Appel> appelDAO) {
		System.out.println("passage resource");
		this.appelDAO = (AppelDAO)appelDAO;
	}
 
	public List<Appel> useDao() {
		System.out.println("passage useDAO");
		System.out.println(appelDAO);
		return appelDAO.select();
	}
 
}
Le problème est que lorsque je teste cette application par une servlet interrogeant le service je me tape un nullPointerException quand il passe dans la méthode "useDAO()". En effet le syso testant la valeur de l'objet appelDAO retourne null.
Pourtant tout est ok au niveau de l'initialisation Spring :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
7 mars 2008 11:41:27 org.springframework.web.context.ContextLoader initWebApplicationContext
INFO: Root WebApplicationContext: initialization completed in 1781 ms
passage servlet
passage useDAO
null
7 mars 2008 11:41:41 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: "Servlet.service()" pour la servlet TestServlet a généré une exception
java.lang.NullPointerException
	at com.testJAX.service.AppelService.useDao(AppelService.java:28)
	at com.testJAX.servlets.TestServlet.doPost(TestServlet.java:24)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
Mes connaissances en spring étant limitées, je fais appel à votre savoir et à votre bon coeur ;-)
D'avance merci