Bonjour !

Mon appli est, en gros, un gestionnaire de contacts, qui stock des infos sur des utilisateurs (10 à 20 users).
Ces informations sont stockées dans un fichier xml : UsersInfos.xml.
Dans mon appli, la servlet principale (ShowUserList) affiche, au format html, le contenu de ce fichier. Il y a donc un travail de parsing de ce fichier xml afin d'en obtenir la représentation sous forme d'Objects java.
Mais je n'ai pas qu'à parser le contenu de ce fichier, je doit aussi écrire dessus. Or, j'ai lu sur un forum qu'il n'était pas possible d'écrire directement sur un fichier contenu dans un jar/war (ce qui peut semble assez logique), donc ce que je fais c'est que je crée un fichier UsersInfos.xml quelque part où je pourrai le modifier (en l'occurence j'ai choisi java.io.tmpdir).
Afin de ne pas partir d'une base vierge (rentrer XX utilisateurs à la main à chaque fois) mon War contient plusieurs ressources dont un fichier "UsersInfos.xml" qui me sert donc de base de départ :

ContactManagerOscar.war
/WEB-INF/
|-...
|-res/
| |-...
| |-UsersInfos.xml
|-...

Je cherche donc à créer un nouveau fichier sur le server où je me trouve et le remplir avec le contenu de celui présent dans mon War.

J'arrive trés bien à effectuer cette opération sous windows avec un petit environnement embarqué qui est capable d'héberger des servlets (à partir d'un .jar équivalent à mon war), mais dès que je passe sous Tomcat, je ne m'en sors pas et j'obtiens ça :

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
2006-10-13 14:34:53 HostConfig[localhost]: D?compression de l archive ContactManagerOscar.war de l application web
2006-10-13 14:34:53 StandardHost[localhost]: Installation d une application pour le chemin de contexte /ContactManagerOscar depuis l URL file:/var/lib/tomcat4/webapps/ContactManagerOscar
2006-10-13 14:34:53 WebappLoader[/ContactManagerOscar]: Deploying class repositories to work directory /var/lib/tomcat4/work/Standalone/localhost/ContactManagerOscar
2006-10-13 14:34:53 WebappLoader[/ContactManagerOscar]: Deploy class files /WEB-INF/classes to /var/lib/tomcat4/webapps/ContactManagerOscar/WEB-INF/classes
2006-10-13 14:34:53 WebappLoader[/ContactManagerOscar]: Deploy JAR /WEB-INF/lib/kxml-min.jar to /var/lib/tomcat4/webapps/ContactManagerOscar/WEB-INF/lib/kxml-min.jar
2006-10-13 14:34:53 StandardManager[/ContactManagerOscar]: Alimentation de la classe du g?n?rateur de nombre al?atoire java.security.SecureRandom
2006-10-13 14:34:53 StandardManager[/ContactManagerOscar]: L alimentation du g?n?rateur de nombre al?atoire est termin?
2006-10-13 14:34:53 StandardWrapper[/ContactManagerOscar:showServlet]: La servlet showServlet est marqu? comme indisponible
2006-10-13 14:34:53 StandardContext[/ContactManagerOscar]: La servlet /ContactManagerOscar a g?n?r? une exception "load()"
javax.servlet.ServletException: Erreur ? l instantiation de la classe servlet com.monsite.partmult.webui.ShowUserList
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:865)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:776)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3363)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:3586)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:774)
	at org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java:115)
	at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:135)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:758)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:548)
	at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:260)
	at org.apache.catalina.core.StandardHost.install(StandardHost.java:741)
	at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:445)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:353)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:671)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1149)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:707)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:316)
	at org.apache.catalina.core.StandardService.start(StandardService.java:450)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:2143)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:463)
	at org.apache.catalina.startup.Catalina.execute(Catalina.java:350)
	at org.apache.catalina.startup.Catalina.process(Catalina.java:129)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:156)
----- Root Cause -----
java.security.AccessControlException: access denied (java.util.PropertyPermission java.io.tmpdir read)
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
	at java.security.AccessController.checkPermission(AccessController.java:427)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
	at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
	at java.lang.System.getProperty(System.java:628)
	at com.monsite.partmult.UsersHandler.<init>(UsersHandler.java:47)
	at com.monsite.partmult.UsersHandler.getInstance(UsersHandler.java:34)
	at com.monsite.partmult.Administrator.<init>(Administrator.java:20)
	at com.monsite.partmult.Administrator.getInstance(Administrator.java:11)
	at com.monsite.partmult.webui.ShowUserList.<init>(ShowUserList.java:35)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
	at java.lang.Class.newInstance0(Class.java:350)
	at java.lang.Class.newInstance(Class.java:303)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:856)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:776)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3363)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:3586)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:774)
	at org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java:115)
	at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:135)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:758)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:548)
	at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:260)
	at org.apache.catalina.core.StandardHost.install(StandardHost.java:741)
	at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:445)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:353)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:671)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1149)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:707)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:316)
	at org.apache.catalina.core.StandardService.start(StandardService.java:450)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:2143)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:463)
	at org.apache.catalina.startup.Catalina.execute(Catalina.java:350)
	at org.apache.catalina.startup.Catalina.process(Catalina.java:129)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:156)
Je pense (mais en fait je n'en sais rien) que c'est un problème de droit d'exécution qui n'ont pas les droits d'écriture, mais comment le savoir ?