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

Langage Java Discussion :

[Java6] Utiliser un script "Javascript" existant


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut [Java6] Utiliser un script "Javascript" existant
    Bonjour,

    J'essai d'utiliser un script "js" existant au sein d'une application JAVA.
    Le problème actuel est que ce script utilise l'objet "document" mis en place automatiquement par les browser representant la page html à traiter.

    Cet objet étant normalement un objet representant le standard w3c.dom j'ai bien essayé de placer un objet implémentant l'interface org.w3c.dom.Document dans le context du script mais sans succés.

    Voici comment je charge le script :

    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
     
    public static ScriptEngine createGooglePrettifyEngine() {
            ScriptEngineManager scriptMgr = new ScriptEngineManager();
            ScriptEngine        jsEngine  = scriptMgr.getEngineByName("JavaScript");
            InputStream is = Prettifier.class.getResourceAsStream("prettify/prettify.js");
            try {
                Reader reader = new InputStreamReader(is);
                jsEngine.eval(reader);
     
                return jsEngine;
            } catch (ScriptException ex) {
                ex.printStackTrace();
            }
            return null;
     
        }
    Ensuite voici comment je l'execute:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    InputStream is = .....;
    Document    document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse( is );
     
    ScriptEngine prettifier = createGooglePrettifyEngine();
    Invocable invocable = (Invocable)prettifier;
     
    prettifier.put("document" , document );
    String prettified = (String)invocable.invokeFunction("prettyPrint");
    Le 1er problème constaté concerne les profils des méthodes.
    Par exemple la méthode getElementsByTagName
    - Dans org.w3c.dom.Document cette méthode retourne une NodeList
    - Dans le javascript cette méthode retourne un array

    Alors j'ai décidé d'utiliser la déléguation afin de creer un objet ayant des profils de méthodes adéquat. mais de fils en aiguille, ca me fait réécrire la puparts des objets DOM sans pour autant m'en sortir.

    Alors comment mettre en place un objet "document" au context du script qui soit conforme ??

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Si cet objet document est pertinent pour le script, je ne vois pas d'autre moyen que de tout retaper. Peut être peux-tu faire une page blanche à l'aide des méthodes de jaxp et/ou DOM, je pense ?

    Sinon, peut être peux-tu faire une interface bouchon à l'aide de Proxy.

  3. #3
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    Bon finalement j'ai trouvé une fonction dans le script qui ne nécessite pas d'objet document.

    Cependant l'execution de cette fonction ne donne pas le même résultat entre une execution par java ou par un browser...

    Le script js est celui de http://code.google.com/p/google-code-prettify/

    La fonction appelée: "prettyPrintOne" prenant une chaine de caractères à colorier syntaxiquement.

    J'ai l'impression qu'a partir de java, des blocs d'initialisations ne s'executent pas ou mal...

    Bref, je vais encore chercher mais ca devient fatiguant.

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