Bonjours à tous !
Bien que j'ai déjà utilisé une fois Spring dans le passé, je ne me souviens pas de tout... J'ai commencé une application Web Google App Engine en n'utilisant que les standards tels que les JSP, Servlets et JDO. Maintenant que tout tourne, je voulais y implémenter d'abord Spring IoC, et ensuite Spring MVC, tout cela à des fins éducatives pour moi :-)
Voilà mon problème :
Tout est configuré, le conteneur démarre correctement. Mais lorsque je tente d'accéder à une page, j'ai un NullPointer sur les DAO qui sont sensé être injectés par Spring... Pourtant, d'après le log, tout me semble correct !
Quelqu'un a une idée ?
web.xml :
applicationContext.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ... <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> ...
daos.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 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- PERSISTENCE MANAGER FACTORY --> <bean id="persistenceManagerFactory" class="org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean"> <property name="persistenceManagerFactoryName" value="transactions-optional" /> </bean> <import resource="daos.xml" /> <import resource="servlets.xml" /> </beans>
servlets.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
34 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="CategoriesDao" class="be.jrousseau.gwtsite.server.dao.implementations.CategoriesDaoImpl"> <property name="pmf" ref="persistenceManagerFactory" /> </bean> <bean id="CompetencesDao" class="be.jrousseau.gwtsite.server.dao.implementations.CompetencesDaoImpl"> <property name="pmf" ref="persistenceManagerFactory" /> </bean> <bean id="ExperiencesDao" class="be.jrousseau.gwtsite.server.dao.implementations.ExperiencesDaoImpl"> <property name="pmf" ref="persistenceManagerFactory" /> </bean> <bean id="FormationsDao" class="be.jrousseau.gwtsite.server.dao.implementations.FormationsDaoImpl"> <property name="pmf" ref="persistenceManagerFactory" /> </bean> <bean id="IntrosDao" class="be.jrousseau.gwtsite.server.dao.implementations.IntrosDaoImpl"> <property name="pmf" ref="persistenceManagerFactory" /> </bean> <bean id="LanguagesDao" class="be.jrousseau.gwtsite.server.dao.implementations.LanguagesDaoImpl"> <property name="pmf" ref="persistenceManagerFactory" /> </bean> <bean id="LoisirsDao" class="be.jrousseau.gwtsite.server.dao.implementations.LoisirsDaoImpl"> <property name="pmf" ref="persistenceManagerFactory" /> </bean> <bean id="PersosDao" class="be.jrousseau.gwtsite.server.dao.implementations.PersosDaoImpl"> <property name="pmf" ref="persistenceManagerFactory" /> </bean> <bean id="ProjectsDao" class="be.jrousseau.gwtsite.server.dao.implementations.ProjectsDaoImpl"> <property name="pmf" ref="persistenceManagerFactory" /> </bean> </beans>
Log :
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
45
46
47
48
49
50
51 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="AdminCategoriesServlet" class="be.jrousseau.gwtsite.server.servlets.AdminCategoriesServlet"> <property name="categoriesDao" ref="CategoriesDao" /> </bean> <bean id="AdminCompetencesServlet" class="be.jrousseau.gwtsite.server.servlets.AdminCompetencesServlet"> <property name="competencesDao" ref="CompetencesDao" /> <property name="categoriesDao" ref="CategoriesDao" /> </bean> <bean id="AdminExperiencesServlet" class="be.jrousseau.gwtsite.server.servlets.AdminExperiencesServlet"> <property name="experiencesDao" ref="ExperiencesDao" /> </bean> <bean id="AdminFormationsServlet" class="be.jrousseau.gwtsite.server.servlets.AdminFormationsServlet"> <property name="formationsDao" ref="FormationsDao" /> </bean> <bean id="AdminIntrosServlet" class="be.jrousseau.gwtsite.server.servlets.AdminIntrosServlet"> <property name="introsDao" ref="IntrosDao" /> </bean> <bean id="AdminLanguagesServlet" class="be.jrousseau.gwtsite.server.servlets.AdminLanguagesServlet"> <property name="languagesDao" ref="LanguagesDao" /> </bean> <bean id="AdminLoisirsServlet" class="be.jrousseau.gwtsite.server.servlets.AdminLoisirsServlet"> <property name="loisirsDao" ref="LoisirsDao" /> </bean> <bean id="AdminPersosServlet" class="be.jrousseau.gwtsite.server.servlets.AdminPersosServlet"> <property name="persosDao" ref="PersosDao" /> </bean> <bean id="AdminProjectsServlet" class="be.jrousseau.gwtsite.server.servlets.AdminProjectsServlet"> <property name="projectsDao" ref="ProjectsDao" /> <property name="experiencesDao" ref="ExperiencesDao" /> </bean> <bean id="AdminServlet" class="be.jrousseau.gwtsite.server.servlets.AdminServlet"> </bean> <bean id="ContactServlet" class="be.jrousseau.gwtsite.server.servlets.ContactServlet"> </bean> <bean id="CurriculumServlet" class="be.jrousseau.gwtsite.server.servlets.CurriculumServlet"> <property name="formationsDao" ref="FormationsDao" /> <property name="experiencesDao" ref="ExperiencesDao" /> <property name="languagesDao" ref="LanguagesDao" /> <property name="loisirsDao" ref="LoisirsDao" /> <property name="persosDao" ref="PersosDao" /> </bean> <bean id="IndexServlet" class="be.jrousseau.gwtsite.server.servlets.IndexServlet"> <property name="introsDao" ref="IntrosDao" /> <property name="categoriesDao" ref="CategoriesDao" /> </bean> </beans>
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 Jun 2, 2010 1:31:22 PM com.google.apphosting.utils.jetty.JettyLogger info INFO: Logging to JettyLogger(null) via com.google.apphosting.utils.jetty.JettyLogger Jun 2, 2010 1:31:22 PM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml INFO: Successfully processed C:\Users\Jonathan\workspace-java\mygwtsite\war\WEB-INF/appengine-web.xml Jun 2, 2010 1:31:22 PM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml INFO: Successfully processed C:\Users\Jonathan\workspace-java\mygwtsite\war\WEB-INF/web.xml Bad level value for property: .level Jun 2, 2010 1:31:22 PM com.google.apphosting.utils.jetty.JettyLogger info INFO: jetty-6.1.x Jun 2, 2010 1:31:25 PM com.google.appengine.tools.development.ApiProxyLocalImpl log INFO: [1275485485220000] javax.servlet.ServletContext log: Initializing Spring root WebApplicationContext Jun 2, 2010 1:31:25 PM org.springframework.web.context.ContextLoader initWebApplicationContext INFO: Root WebApplicationContext: initialization started Jun 2, 2010 1:31:25 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh INFO: Refreshing Root WebApplicationContext: startup date [Wed Jun 02 13:31:25 UTC 2010]; root of context hierarchy Jun 2, 2010 1:31:26 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO: Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext.xml] Jun 2, 2010 1:31:26 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO: Loading XML bean definitions from ServletContext resource [/WEB-INF/daos.xml] Jun 2, 2010 1:31:26 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO: Loading XML bean definitions from ServletContext resource [/WEB-INF/servlets.xml] Jun 2, 2010 1:31:27 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@67a5fb5a: defining beans [persistenceManagerFactory,CategoriesDao,CompetencesDao,ExperiencesDao,FormationsDao,IntrosDao,LanguagesDao,LoisirsDao,PersosDao,ProjectsDao,AdminCategoriesServlet,AdminCompetencesServlet,AdminExperiencesServlet,AdminFormationsServlet,AdminIntrosServlet,AdminLanguagesServlet,AdminLoisirsServlet,AdminPersosServlet,AdminProjectsServlet,AdminServlet,ContactServlet,CurriculumServlet,IndexServlet]; root of factory hierarchy Jun 2, 2010 1:31:27 PM org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean afterPropertiesSet INFO: Building new JDO PersistenceManagerFactory for name 'transactions-optional' Jun 2, 2010 1:31:31 PM org.springframework.web.context.ContextLoader initWebApplicationContext INFO: Root WebApplicationContext: initialization completed in 6212 ms Jun 2, 2010 1:31:32 PM com.google.apphosting.utils.jetty.JettyLogger info INFO: Started SelectChannelConnector@127.0.0.1:8888 Jun 2, 2010 1:31:32 PM com.google.appengine.tools.development.DevAppServerImpl start INFO: The server is running at http://localhost:8888/ Jun 2, 2010 1:32:21 PM com.google.apphosting.utils.jetty.JettyLogger warn WARNING: / java.lang.NullPointerException at be.jrousseau.gwtsite.server.servlets.IndexServlet.doGet(IndexServlet.java:30) at javax.servlet.http.HttpServlet.service(HttpServlet.java:693) at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:51) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:349) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Partager