[JAVA/GWT] RPC Java.io access denied
Bonjour à tous,
J'espère poster au bon endroit cette fois ci :mrgreen:
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:
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
Code:
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);
} |
BinaryOpener.java
Code:
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();
} |
Côté serveur, mon implémentation pour ouvrir le fichier
Code:
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 :cry:
Code:
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)
... |
Précision : je développe sous l'IDE eclipse avec le plug-in qui va bien.
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. 8-)
Merci d'avance pour les futurs réponses :ccool: !