Bonjour à tous,
J'espère poster au bon endroit cette fois ci
Je débute en Java et bien entendu en GWT. J'ai un soucis certainement de compréhension sur l'ouverture d'un fichier binaire côté serveur avec Java.io en passant par un appel RPC.
Je souhaite ouvrir mon fichier binaire et récupérer son contenu dans un tableau.
Voici mon code côté client :
Projet.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public void open(){ openservice.BinServer( new AsyncCallback <int[]>(){ public void onFailure(Throwable caught) { // TODO Auto-generated method stub Window.alert("Fail!"+caught); } public void onSuccess(int[] result) { // TODO Auto-generated method stub plot=result; Window.alert(plot[0]+""); } }); }
BinaryOpenerAsync.java
BinaryOpener.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 import com.google.gwt.user.client.rpc.AsyncCallback; /** * The async counterpart of <code>BinaryOpener</code>. */ public interface BinaryOpenerAsync { void BinServer(AsyncCallback <int[]> callback); }
Côté serveur, mon implémentation pour ouvrir le fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; /** * The client side stub for the RPC service. */ @RemoteServiceRelativePath("greet") public interface BinaryOpener extends RemoteService { int[] BinServer(); }
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 import fr.maboite.monprojet.client.BinaryOpener; import com.google.gwt.user.client.Window; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import java.io.*; /** * The server side implementation of the RPC service. */ public class BinaryOpenerImpl extends RemoteServiceServlet implements BinaryOpener { public int[] BinServer(){ int[] plot={42}; //en attendant une meilleur déclaration try{ FileInputStream file_input = new FileInputStream ("C://GWT//work//fichier.ECG"); DataInputStream data_in = new DataInputStream (file_input ); int i=0; while (true) { try { plot[i]=data_in.readInt(); i++; }catch (EOFException eof) { Window.alert("End of File"); break; } } // Fermeture du fichier data_in.close(); }catch (IOException e){ Window.alert("Erreur de chargement"); } return plot; } }
Les insultes de la console
Précision : je développe sous l'IDE eclipse avec le plug-in qui va bien.
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 SEVERE: [1274887288433000] javax.servlet.ServletContext log: Exception while dispatching incoming RPC call com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract int[] fr.maboite.monprojet.client.BinaryOpener.BinServer()' threw an unexpected exception: java.security.AccessControlException: access denied (java.io.FilePermission C:\GWT\work\fichier.ECG read) at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:378) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:581) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:188) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) 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.content(HttpConnection.java:938) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) 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) Caused by: java.security.AccessControlException: access denied (java.io.FilePermission C:\GWT\work\fichier.ECG read) ...
Mon appel RPC fonctionne correctement, si j'ouvre pas le fichier, je récupére bien la première valeur de mon tableau initié côté serveur.
Pour le problème d'accès j'ai été bidouillé un peu le fichier java.policy mais sans succès...
Voilà merci aux courageux de m'avoir lu.
Merci d'avance pour les futurs réponses!
Partager