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

API standards et tierces Java Discussion :

[Runtime]Taille de paramètre trop importante


Sujet :

API standards et tierces Java

  1. #1
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut [Runtime]Taille de paramètre trop importante
    Bonjour tout le monde.

    Je cherche a éxécuter une application Java depuis une autre application Java.
    J'ai donc mis en place tout le tuttim, depuis le bouton (qui est sensé lancer l'application tierce) jusqu'à son listener qui utilise la commande )]Runtime.exec(String[])

    Je passe à mon application plusieurs paramètres dont un flux XML (sous forme de String).

    Tout marche bien, SAUF si je mets des valeurs d'attributs (sous forme de String) trop grande dans mes balises XML.

    En gros, j'ai une balise <attribute name="Comment" value="mon commentaire"/> qui se répète moult fois ans mon flux XML, et je n'ai pas le droit de mettre une chaine de plus de 16 caractères à la place de "mon commentaire", sans quoi je lève l'exception suivante :
    Citation Envoyé par Exception levée
    Unable to launch MySoft4 : IOError
    java.io.IOException: CreateProcess: java -jar MySoft4.jar -s Logiciel -x <tree><declarations><attributeDecl&nbsp;name=\"name\"&nbsp;type=\"String\"&nbsp;/>
    <attributeDecl&nbsp;name=\"C:&nbsp;value\"&nbsp;type=\"Float\"&nbsp;/>
    <attributeDecl&nbsp;name=\"Comment\"&nbsp;type=\"String\"&nbsp;/></declarations>
    <branch><attribute&nbsp;name=\"name\"&nbsp;value=\"Design\"&nbsp;/><branch>
    <attribute&nbsp;name=\"name\"&nbsp;value=\"Documentation\"&nbsp;/><leaf>
    <attribute&nbsp;name=\"name\"&nbsp;value=\"Emergency&nbsp;Response&nbsp;Plan&nbsp;(ERP)&nbsp;documentation&nbsp;available\"&nbsp;/>
    <attribute&nbsp;name=\"C:&nbsp;value\"&nbsp;value=\"0.0\"&nbsp;/><attribute&nbsp;name=\"Comment\"&nbsp;value=\"12345678901234567\"&nbsp;/>
    </leaf><leaf><attribute&nbsp;name=\"name\"&nbsp;value=\"HAZOP&nbsp;documentation&nbsp;available\"&nbsp;/>
    <attribute&nbsp;name=\"C:&nbsp;value\"&nbsp;value=\"100.0\"&nbsp;/><attribute&nbsp;name=\"Comment\"&nbsp;value=\"12345678901234567\"&nbsp;/>
    </leaf><leaf><attribute&nbsp;name=\"name\"&nbsp;value=\"HIPS&nbsp;documentation”
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at com.mySociety.logiciel.ButtonsListener.mouseClicked(ButtonsListener.java:62)
    at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    et voici le code qui m'a servi pour faire ceci
    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
    String param = XmlDocument.getXmlStreamForMySoft().replaceAll("\"", "\\\\\"").replaceAll(" ","&nbsp;");
    param=param.substring(param.indexOf("<tree>"));
    String[] cmd={"java","-jar","MySoft4.jar", "-s", "Logiciel", "-x", param};
     
    try{
    	Runtime r = Runtime.getRuntime(); 
     
    	r.traceInstructions(true);
    	r.traceMethodCalls(true);
     
    	final Process proc = r.exec(cmd);
    	((JFrame)mainFrame).dispose();
    }catch (IOException e1){
    	System.out.println("Unable to launch MySoft4 : IOError");
    	e1.printStackTrace();
    }catch (SecurityException e1){
    	System.out.println("Unable to launch MySoft4 : Security Exception");
    	e1.printStackTrace();
    }catch (NullPointerException e1){
    	System.out.println("Unable to launch MySoft4 : Null pointer");
    	e1.printStackTrace();
    }catch (IllegalArgumentException e1){
    	System.out.println("Unable to launch MySoft4 : Illegal argument");
    	e1.printStackTrace();
    }
    Donc pour résumer, si jamais dans mon String "param", l'attribut dont le nom est Comment a une valeur de plus de 16 carctère, ça plante, sinon ça marche, et je ne sais pas pourquoi.

    Y a t'il quelque chose à faire du côté du deuxième paramètre String[] envp, car je ne vois pas du tout ce que je pourrais mettre dedans...
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 104
    Points : 140
    Points
    140
    Par défaut
    Est-ce que tu n'aurais pas atteint une limite de ton OS concernant la longueur d'une commande ?
    C'est la première fois que je vois la ligne de commande utilisée pour passer une grande quantité de données !

    Le paramètre envp sert à définir des variables d'environnement, comme PATH ou TMP.

  3. #3
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Citation Envoyé par pk960
    Est-ce que tu n'aurais pas atteint une limite de ton OS concernant la longueur d'une commande ?
    Ben oui, justement, c'est bien ce que je crains !
    C'est pourquoi je voudrais savoir si quelqu'un a déjà rencontré ce genre de problème et surtout si quelqu'un y a trouvé une solution. Ca m'embête un peu de perdre l'avantage de mon flux XML, et c'est une demande du client que d'avoir cette interaction entre les 2 logiciels.

    Autre contrainte client : L'espace disque disponible sur les HDD pour chaque utilisateur est extrèmement réduit, et j'ai peur de ne pas avoir la place d'écrire mon flux XML dans un fichier sur certains des postes client...

    Citation Envoyé par pk960
    Le paramètre envp sert à définir des variables d'environnement, comme PATH ou TMP.
    OK, Merci. Dans ce cas là, je ne pense pas que ce soit ça qu'il me faille !
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  4. #4
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Bon ben ça se confirme pas mal du côté de la limite de paramètre. Comme je récupère mes données depuis une base pour créer mon flux XML, j'ai légèrement modifié la requête pour ne plus renvoyer toutes mes données. J'ai donc un flux XML plus cours... et je peux mettre ce que je veux dans ma balise COMMENT...

    Je vais essayer de scinder mon XML pour l'envoyer en plusieurs paramètres. Ca me permettra de savoir si c'est la taille totale de tous les paramètres qui bloque, ou si c'est la taille individuelle d'un paramètre.
    Je vous tiens au courant.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  5. #5
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Une autre possibilité si tu peux modifier le programme MySoft4 serait de passer tes paramètres par un fichier.

    Je m'explique. Au lieu de passer la ligne xml en argument, tu l'écris dans un fichier et tu passes le nom du fichier à Mysoft:

    Contenu du fichier temporaire tmpAXD01.dat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <tree>
        <declarations>
            <attributeDecl name=\"name\" type=\"String\" />
            <attributeDecl name=\"C: value\" type=\"Float\" />
            <attributeDecl name=\"Comment\" type=\"String\" />
        </declarations>
        <branch>
            <attribute name=\"name\" value=\"Design\" />
            <branch>
    ...
    ...
    ...
    Appel à ton programme:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tring[] cmd={"java","-jar","MySoft4.jar", "-s", "Logiciel", "-f", "tmpAXD01.dat"};

    Une autre possibilité serait d'appeller indirectement (l'appel se fait dans un thread) la méthode main de MySoft4 avec comme argument tes paramètres (solution non testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String params = {"-s", "Logiciel", "-x", param};
    Thread myThread = new Thread (
       void run() {
      mon.package.ClasseMySoft4.main(params);
      }
    );
     
    myThread.start();
    Bien le bonjour chez vous
    Jowo

  6. #6
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Bon ben voilà... ce n'est pas du à la taille d'UN paramètre.
    Je viens de le couper en plusieurs paramètres, plus cours, mais rien ni fait...

    J'attends vos suggestions;

    Par avance, Merci.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  7. #7
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Appel à ton programme: String[] cmd={"java","-jar","MySoft4.jar", "-s", "Logiciel", "-f", "tmpAXD01.dat"};
    Oui, surtout que mon programme est déjà codé pour accepter ce genre de paramètre...
    Mon problème, comme je le disais, c'est que les postes chez mon client ont extrèmement peu d'espace disque disponible pour l'utilisateur : 3Mo.
    Si l'utilisateur à déjà 2-3 choses sur son disques, il n'y aura plus la place d'écrire mon fichier "tmpAXD01.dat".

    Par contre, je retiens ton autre idée, et je crois bien que je vais fondre mais 2 logiciels en un pour m'affranchir des paramètres et travailler directement en appelant les méthodes de MySoft4.

    Je vous tiens au courant.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  8. #8
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    OK.

    Je viens de fondre mes 2 logiciels en un (j'ai juste inclus les packages de MySoft4 dans Logiciel).
    Résultat, j'ai un peu surchargé quelques méthodes, pour ne plus passer des String mais aussi des Document.

    Je fait donc tout mon traitement directement sur le Document, qui voyage de méthodes en méthodes... ET CA MARCHE !

    Merci beaucoup à tous.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 106
    Points : 130
    Points
    130
    Par défaut
    ne pas oublier le tag RESOLU
    PHP / J2EE

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD-2007] .rtf prise en taille trop importante
    Par Debutant10 dans le forum Word
    Réponses: 3
    Dernier message: 13/08/2012, 09h12
  2. Couche WFS: taille de la requête trop importante
    Par mga_geo dans le forum IGN API Géoportail
    Réponses: 1
    Dernier message: 04/06/2012, 16h40
  3. Taille trop importante du fichier .FMX
    Par Jeje74 dans le forum Forms
    Réponses: 2
    Dernier message: 26/07/2011, 13h40
  4. Taille d'archive trop grande
    Par mick84m dans le forum Shell et commandes GNU
    Réponses: 14
    Dernier message: 12/05/2005, 16h39

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