IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GWT et Vaadin Java Discussion :

[JAVA/GWT] RPC Java.io access denied


Sujet :

GWT et Vaadin Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 34
    Par défaut [JAVA/GWT] RPC Java.io access denied
    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
    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);
    }
    BinaryOpener.java
    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();
    }
    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
    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
    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)
    ...
    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.


    Merci d'avance pour les futurs réponses !

  2. #2
    Membre confirmé Avatar de waldo2188
    Profil pro
    Chef de projets
    Inscrit en
    Mars 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets

    Informations forums :
    Inscription : Mars 2004
    Messages : 115
    Par défaut
    Salut,

    Je dirais simplement que tu n'a peut-être pas le droit de lire le fichier?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.security.AccessControlException: access denied (java.io.FilePermission C:\GWT\work\fichier.ECG read)
    Essaie de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInputStream file_input = new FileInputStream ("C:\GWT\work\fichier.ECG");
    Pas dis que cela marche.

    Bon courage

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 34
    Par défaut
    Merci waldo mais malheuresement, il aime pas trop les \ ! Merci quand même !

    Je précise que le fichier, j'ai les droits de lecture pour tout le monde, y'a pas de soucis à ce niveau. Par contre pour le Java.policy, je sais pas si faut vraiment le modifier ou pas, je l'ai remis d'origine au cas où.

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 34
    Par défaut
    Pour info j'ai utiliser policytool pour ajouter ma permission d'écriture dans le fichier java.policy

    J'ai mis Base code file:/C:/GWT/work et la permission
    java.io.FilePermission <<ALL FILES>>,"read"

    J'ai fait de même dans le fichier javaws.policy. Mais rien n'y fait

    Vu que j'ai aussi un doute sur la manière de remplir le tableau (dommage qu'un équivalent de push n'est pas implémenté), je l'ai commenté. Et c'est toujours l'ouverture du fichier qui ne fonctionne pas...

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 34
    Par défaut
    Je crois savoir pourquoi cela fonctionne pas, l'application n'étant pas signé elle n'a pas accès au fichier du système.

    J'ai utiliser le même code pour un projet JavaFX, et la pas de soucis, il fonctionne parfaitement. Par contre dans NetBeans que j'utilise pour JavaFX, y'a l'option self-signed pour justement que ça déclenche pas d'erreur de ce genre.

    Je travail sous Eclipse pour GWT et je n'ai pas trouver cette équivalent. Quelqu'un sait comment je peux auto-signé mon appli sous eclipse ??
    (je ferai la commande javasigner quand j'aurais compilé tout ça)
    Merci d'avance.

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 34
    Par défaut
    Pour ceux que ça intéresse, voici le code pour ouvrir un fichier binaire et le mettre dans un tableau.

    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
    public class Opener {
    	public static short[] BinServer() throws IOException {
    		File file = new File("C://monchemin//fichier.ECG");
    		InputStream is = new FileInputStream(file);
     
            //Récupération de la longueur du fichier
            long length = file.length();
           //On déclare notre tableau de byte de la longueur voulu
            byte[] bytes = new byte[(int)length];
     
            // On lis le fichier
            int offset = 0;
            int numRead = 0;
            while (offset < bytes.length
                   && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
                offset += numRead;
            }
     
            // Fermeture du flux
            is.close();
            // On convertis le tableau de byte en short
            short[] read = new short[(int)length];
            for(int i=0; i<bytes.length;i++){
            	read[i] = (short)((short)bytes[i] & 0xff);
            }
            //on retourne le tout
            return read;
        }
    }

Discussions similaires

  1. [DEPLACER]RPC JAVA.IO Access denied
    Par blackbird67 dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 02/06/2010, 21h31
  2. access denied (java.util.PropertyPermission java.io.tmpdir read)
    Par benyboyJAVA dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 12/01/2009, 11h12
  3. java.security.AccessControlException: access denied
    Par mcmazigh dans le forum Applets
    Réponses: 1
    Dernier message: 25/08/2008, 17h11
  4. java.security.AccessControlException: access denied
    Par ludonantes dans le forum Applets
    Réponses: 10
    Dernier message: 28/03/2006, 17h44
  5. Réponses: 2
    Dernier message: 27/03/2006, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo