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

BIRT Discussion :

Parsing du .rptdesign de l'API de BIRT


Sujet :

BIRT

  1. #1
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut Parsing du .rptdesign de l'API de BIRT
    Bonjour,
    quand je fait le debugae du code tout va bien jusqu'a la méthode " TASK.run();"

    Qui me cause les message d'erreur suivant plusieurs fois:
    nov. 04, 2013 10:39:35 AM org.eclipse.datatools.enablement.oda.xml.util.SaxParser run
    WARNING: Exceptions occur during xml parsing
    java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.eclipse.datatools.enablement.oda.xml.util.SaxParser.parse(SaxParser.java:168)
    at org.eclipse.datatools.enablement.oda.xml.util.SaxParser.run(SaxParser.java:119)
    at java.lang.Thread.run(Thread.java:722)
    Caused by: org.xml.sax.SAXParseException; Premature end of file.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    ... 7 more
    Bien qu’avec un rapport vierge ça fonctionne bien, ce qui me laisse présume que le parseur n'arrive pas à lire quelque chose dans mon rapport !!

    Mais lequel, comment le détecter et sure tout comment le solution (y a-t-il des choses qui manque dans mon code) ?!

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2009
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2009
    Messages : 529
    Points : 836
    Points
    836
    Par défaut
    Et ce .rptdesign s'ouvre correctement avec le report designer Eclipse?

  3. #3
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Citation Envoyé par donino Voir le message
    Et ce .rptdesign s'ouvre correctement avec le report designer Eclipse?
    Oui je l'ouvre avec mon designer sans problème puis je fait un preview le rapport est bien généré !!

    Mais je crois que le problème viens du sous rapport qui intégré dans mon .rptdesign (mais je ne sais pas exactement) ??!!

    NB: voilà mon code source
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    import java.io.ByteArrayInputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    import java.util.logging.Level;
    import javax.swing.JOptionPane;
     
    import org.eclipse.birt.core.framework.Platform;
    import org.eclipse.birt.report.engine.api.EngineConfig;
    import org.eclipse.birt.report.engine.api.EngineConstants;
    import org.eclipse.birt.report.engine.api.EngineException;
    import org.eclipse.birt.report.engine.api.IReportEngine;
    import org.eclipse.birt.report.engine.api.IReportEngineFactory;
    import org.eclipse.birt.report.engine.api.IReportRunnable;
    import org.eclipse.birt.report.engine.api.IRunTask;
     
    /**
     * Inspiration de http://wiki.eclipse.org/Simple_Execute_(BIRT)_2.1
     */
    public class Exemplebirt {
     
        public static IReportEngine engine;
        private static final String HOME_REPORT_ENGINE = "runtime\\ReportEngine";
        private static final String PHATH_REPORT_DESIGN = "Rapports\\monRapport.rptdesign";
        private static final String PHATH_REPORT_DOCUMENT = "Rapports\\monRapport.rptdocument";
     
        public Exemplebirt(){
            try {
                EngineConfig config = new EngineConfig();
                config.setEngineHome(HOME_REPORT_ENGINE);
                config.setLogConfig(null, Level.FINE);
     
                Platform.startup(config);
                IReportEngineFactory factory = (IReportEngineFactory) Platform
                        .createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
                engine = factory.createReportEngine(config);
                engine.changeLogLevel(Level.WARNING);
     
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
            }        
        }
     
        public void excecuteReport() throws EngineException, FileNotFoundException {
            //Open the report design
            try {
                IReportRunnable design = engine.openReportDesign(PHATH_REPORT_DESIGN);
                //Create task to run the report - use the task to execute the report and save to disk.
                IRunTask task = engine.createRunTask(design);
                //Set parent classloader for engine
                task.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, Exemplebirt.class.getClassLoader());
     
                // Paramétrage de la tâche en spécifiant la source données XML
                task.getAppContext().put("org.eclipse.datatools.enablement.oda.xml.inputStream", this.build_data_xml());
     
                //run the report and destroy the engine
                task.run(PHATH_REPORT_DOCUMENT);
                task.close();
     
            } catch (EngineException e1) {
                System.out.println("[Lecture de l'état BIRT]........FAILED : " + e1.getMessage());
            }
            System.out.println("[Lecture de l'état BIRT]................OK");
            engine.destroy();
            Platform.shutdown();
            System.out.println("Fini...");
        }
     
        private InputStream build_data_xml() throws FileNotFoundException{
                // Paramétrage de la tâche en spécifiant la source données XML
                InputStream fis = new FileInputStream("Rapports\\data\\41-1506146_Form842009_Form1.xml");// fichier XML contenant les données pour alimenter le rapport
     
    ByteArrayInputStream(interchangeDataXML.getBytes());       
     
                return fis;
        }    
     
        public static void main(String[] arg) throws FileNotFoundException {
            Exemplebirt h = new Exemplebirt();
     
            try {
                h.excecuteReport();
            } catch (EngineException e) {
                // TODO Auto-generated catch block
            }
     
     
        }
    }

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2009
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2009
    Messages : 529
    Points : 836
    Points
    836
    Par défaut
    ça ressemble plutôt un peu à une erreur de version: par exemple un .rptdesign généré avec un designer 4.3 mais l'appli java qui utilise une version plus ancienne de l'API. D'ailleurs si tu utilises une version 3.7+ ou plus récente le code n'est pas bon, la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setEngineHome(HOME_REPORT_ENGINE);
    est censée ne plus être utilisée. Inspire toi plutôt des exemples mis à jour ici

  5. #5
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Citation Envoyé par donino Voir le message
    ça ressemble plutôt un peu à une erreur de version: par exemple un .rptdesign généré avec un designer 4.3 mais l'appli java qui utilise une version plus ancienne de l'API. D'ailleurs si tu utilises une version 3.7+ ou plus récente le code n'est pas bon, la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setEngineHome(HOME_REPORT_ENGINE);
    est censée ne plus être utilisée. Inspire toi plutôt des exemples mis à jour ici
    Ok, j'ai vérifié ça
    j'utilise bien le birt-designer-4.3.0 pour générer le rapport que j'utilise avec l'API de BIRT (la version du birt-runtime-4.3.0)

    Pour le code si j'ai bien compris pour mon cas je dois juste supprimer la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setEngineHome(HOME_REPORT_ENGINE);
    du fait que aujourd'hui avec la version de BIRT il peu la faire avec un POJO Runtime.


    Mais toujours le même message d'erreur
    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
    nov. 06, 2013 4:20:26 PM org.eclipse.datatools.enablement.oda.xml.util.SaxParser run
    WARNING: Exceptions occur during xml parsing
    java.lang.reflect.InvocationTargetException
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:601)
    	at org.eclipse.datatools.enablement.oda.xml.util.SaxParser.parse(SaxParser.java:168)
    	at org.eclipse.datatools.enablement.oda.xml.util.SaxParser.run(SaxParser.java:119)
    	at java.lang.Thread.run(Thread.java:722)
    Caused by: org.xml.sax.SAXParseException; Premature end of file.
    	at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    	at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
    	at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    	at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    	at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    	at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    	... 7 more
    j'ai peu le localisé la source de du message d'erreur, je sais que ça vient du fait que j'ai un sous-rapport (lié a un *.rptlibrary)

    Mais toujours pas de solution !!

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2009
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2009
    Messages : 529
    Points : 836
    Points
    836
    Par défaut
    je sais que ça viens du fait que j'ai un sous-rapport (lié a un *.rptlibrary)
    Ah ok c'est tout à fait possible. Je suppose que tu as fait le test avec un rapport qui n'utilise pas de .rptlibrary et que dans ce cas là ça fonctionne?

    Il faut donner au moteur BIRT le chemin des ressources (*.rptlibrary, images, *.properties...) utilisées par les rapports avec ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setResourcePath("/path/to/my/resourcePath");
    Donc la première chose à faire est de déterminer quel est ton "resourcePath" dans Eclipse (par défaut la racine du projet dans le workspace)

  7. #7
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Citation Envoyé par donino Voir le message
    Ah ok c'est tout à fait possible. Je suppose que tu as fait le test avec un rapport qui n'utilise pas de .rptlibrary et que dans ce cas là ça fonctionne?

    Il faut donner au moteur BIRT le chemin des ressources (*.rptlibrary, images, *.properties...) utilisées par les rapports avec ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setResourcePath("/path/to/my/resourcePath");
    Donc la première chose à faire est de déterminer quel est ton "resourcePath" dans Eclipse (par défaut la racine du projet dans le workspace)
    Oui exactement j'ai fait le test sans les *.rptlibrary est sa fonctionne bien.

    Pour la solution que tu ma proposé j'ai testé avec la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setResourcePath("Rapports\\tpl");
    j'ai aussi testé avec un chemin absolu (d’après ce que j'ai vu sur le web).

    J'ai toujours la même erreur y t'il un exemple qui très de ce type de cas ?!!

    Merci d'avance

  8. #8
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2009
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2009
    Messages : 529
    Points : 836
    Points
    836
    Par défaut
    Oui il faut donner un chemin absolu. Mais attention, il faut donner le chemin du "resourcePath", et non pas directement le chemin de la librairie. Ce n'est pas forcément la même chose.

    Dans le designer Eclipse, on peut connaitre le resourcePath en faisant:

    Window -> Preferences -> Report Design -> Resources -> "Resource folder"

    Poste ce qu'il t'affiche dans cette propriété, et poste aussi le chemin du répertoire dans lequel est située la librairie .rptlibrary

    Dans tes tests, l'application java utilise directement les rapports du Workspace Eclipse designer? ou bien tu copies les rapports à un autre endroit pour y accéder depuis l'appli?

  9. #9
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Citation Envoyé par donino Voir le message
    Oui il faut donner un chemin absolu. Mais attention, il faut donner le chemin du "resourcePath", et non pas directement le chemin de la librairie. Ce n'est pas forcément la même chose.

    Dans le designer Eclipse, on peut connaitre le resourcePath en faisant:

    Window -> Preferences -> Report Design -> Resources -> "Resource folder"

    Poste ce qu'il t'affiche dans cette propriété, et poste aussi le chemin du répertoire dans lequel est située la librairie .rptlibrary
    j'ai vu sur mon Eclipse mais il est écrite "<Current Project Folder>"
    pour le reste je suis pas sûr d'avoir bien compris, y a t'il deux chemin a définir ?
    en tout cas je fais en sorte d'avoir le chemine absolue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setResourcePath(new File(PHATH_SUB_REPORT).getAbsolutePath());
    Je ne suis pas sûr que ce soit correct !! Mais j'ai toujours le même message d'erreur.

    Si ta un ou vu exemple qui fait quelque chose de ressemblant ça serait bien de m'envoyer le lien.

    Citation Envoyé par donino Voir le message
    Dans tes tests, l'application java utilise directement les rapports du Workspace Eclipse designer? ou bien tu copies les rapports à un autre endroit pour y accéder depuis l'appli?
    Oui je copie le projet fait avec le designer BIRT dans mon projet JAVA, mais je m'assure que c'est la même racine du projet entre les deux (les chemine devrais être bon)

  10. #10
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2009
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2009
    Messages : 529
    Points : 836
    Points
    836
    Par défaut
    Ok donc <Current project folder> indique que le resourcePath est la racine du projet Eclipse. Tu n'as pas répondu à la question sur le répertoire de la librairie, ça aurait été plus facile mais je vais essayer d'expliquer quand même.

    Je ne peux pas envoyer d'exemple, car c'est juste une question de compréhension du fonctionnement des ressources.

    Oui en quelque sorte il y a deux chemins:
    - Le chemin absolu de la racine des ressources des rapports (le fameux "resourcePath")
    - Le chemin relatif de la librairie à l'intérieur du resourcePath. C'est le point important: il faut qu'il soit exactement le même dans l'appli java que dans Eclipse.

    Par exemple:
    Puisque dans Eclipse le resourcePath est la racine du projet, si la librairie se trouve dans un sous-répertoire rapports/lib, alors ce sous-répertoire est directement le chemin relatif de la librairie.

    Cela signifie que dans l'application java il faut précisément créer un répertoire /rapports/lib sous le répertoire que l'on a déclaré en config.setResourcePath(...), et y copier la librairie. Et là ça fonctionnera.

    Je reconnais que c'est un point difficile, j'ai toujours un mal fou à l'expliquer

    J'espère que cette réponse aidera.

  11. #11
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    J’ai utilisé le chemin suivant : "sachant que mes sous rapport sans dans le dossier tpl (les *.rptlibrary)"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    config.setResourcePath(new File("rapports\\tpl").getAbsolutePath());
    le message d'erreur n'a pas changé !!

    Ci-joint une capture de la hiérarchie de mon dossier de projet JAVA.
    Images attachées Images attachées  

  12. #12
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2009
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2009
    Messages : 529
    Points : 836
    Points
    836
    Par défaut
    J’ai utilisé le chemin suivant : "sachant que mes sous rapport sans dans le dossier tpl (les *.rptlibrary)"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setResourcePath(new File("rapports\\tpl").getAbsolutePath());
    Non ça ne peut pas fonctionner comme ça . Le moteur BIRT ne peut pas retrouver la librairie si on la met à la racine du resourcePath... Tu n'as pas compris la notion de chemin relatif à l'intérieur du resourcePath. On va faire simple: dans le designer Eclipse birt, clique sur l'onglet "Resource Explorer" à coté de la palette.

    Danc ce resource Explorer l'élément racine est "Shared resources". Donne nous le chemin relatif qui conduit à la librairie en question (je suppose que c'est aussi dans un répertoire tpl, mais bon soyons précis...).

  13. #13
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Citation Envoyé par donino Voir le message
    Non ça ne peut pas fonctionner comme ça . Le moteur BIRT ne peut pas retrouver la librairie si on la met à la racine du resourcePath... Tu n'as pas compris la notion de chemin relatif à l'intérieur du resourcePath. On va faire simple: dans le designer Eclipse birt, clique sur l'onglet "Resource Explorer" à coté de la palette.

    Danc ce resource Explorer l'élément racine est "Shared resources". Donne nous le chemin relatif qui conduit à la librairie en question (je suppose que c'est aussi dans un répertoire tpl, mais bon soyons précis...).
    Effectivement ce est-ce qu'il me semblé être au début, mais je n'été pas sur a 100% vu que j'ai fait le test avec le path = "tpl" mais j'ai eu le même message d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setResourcePath(new File("tpl").getAbsolutePath());
    message d'erreur:
    nov. 11, 2013 2:43:29 PM org.eclipse.datatools.enablement.oda.xml.util.SaxParser run
    WARNING: Exceptions occur during xml parsing
    java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.eclipse.datatools.enablement.oda.xml.util.SaxParser.parse(SaxParser.java:168)
    at org.eclipse.datatools.enablement.oda.xml.util.SaxParser.run(SaxParser.java:119)
    at java.lang.Thread.run(Thread.java:722)
    Caused by: org.xml.sax.SAXParseException; Premature end of file.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    ... 7 more

    [Lecture de l'état BIRT]................OK
    Fini...
    Ci-joint l'architecture du projet vu par BIRT.
    Images attachées Images attachées  

  14. #14
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2009
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2009
    Messages : 529
    Points : 836
    Points
    836
    Par défaut
    avec ça, cela devrait fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setResourcePath(new File("rapports").getAbsolutePath());

  15. #15
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Citation Envoyé par donino Voir le message
    avec ça, cela devrait fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setResourcePath(new File("rapports").getAbsolutePath());
    J’aurai bien aimé que ça fonctionne mais il me semble qu'il y autre chose que je ne vois pas.

    Ci-dessous mon code peut-être qu''une révision de votre par va détecte quelque chose.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    import java.util.logging.Level;
    import javax.swing.JOptionPane;
     
    import org.eclipse.birt.core.framework.Platform;
    import org.eclipse.birt.report.engine.api.EngineConfig;
    import org.eclipse.birt.report.engine.api.EngineConstants;
    import org.eclipse.birt.report.engine.api.EngineException;
    import org.eclipse.birt.report.engine.api.IReportEngine;
    import org.eclipse.birt.report.engine.api.IReportEngineFactory;
    import org.eclipse.birt.report.engine.api.IReportRunnable;
    import org.eclipse.birt.report.engine.api.IRunTask;
     
    /**
     * Inspiration de http://wiki.eclipse.org/Simple_Execute_(BIRT)_2.1
     */
     
    public class Exemplebirt {
     
        public static IReportEngine engine;
        private static final String PHATH_REPORT_DESIGN = "rapports\\monRapport.rptdesign";
        private static final String PHATH_SUB_REPORT = "rapports";    
        private static final String PHATH_REPORT_DOCUMENT = "rapports\\monRapport.rptdocument";
                static String currentDir = System.getProperty("user.dir");
     
        public Exemplebirt(){
            try {
                EngineConfig config = new EngineConfig(); //config.setEngineHome("");
                config.setLogConfig(null, Level.FINE);
                config.setResourcePath(new File(PHATH_SUB_REPORT).getAbsolutePath());
     
                Platform.startup(config);
                IReportEngineFactory factory = (IReportEngineFactory) Platform
                        .createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
                engine = factory.createReportEngine(config);
                engine.changeLogLevel(Level.WARNING);
     
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
            }        
        }
     
        public void excecuteReport() throws EngineException, FileNotFoundException {
            //Open the report design
            try {
                IReportRunnable design = engine.openReportDesign(PHATH_REPORT_DESIGN);
                //Create task to run the report - use the task to execute the report and save to disk.
                IRunTask task = engine.createRunTask(design);
                //Set parent classloader for engine
                task.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, Exemplebirt.class.getClassLoader());
     
                // Paramétrage de la tâche en spécifiant la source données XML     task.getAppContext().put("org.eclipse.datatools.enablement.oda.xml.inputStream", this.build_data_xml());
     
                //run the report and destroy the engine
                task.run(PHATH_REPORT_DOCUMENT);
                task.close();
     
            } catch (EngineException e1) {
                System.out.println("[Lecture de l'état BIRT]........FAILED : " + e1.getMessage());
            }
            System.out.println("[Lecture de l'état BIRT]................OK");
            engine.destroy();
            Platform.shutdown();
            System.out.println("Fini...");
        }
     
        private InputStream build_data_xml() throws FileNotFoundException{
                // Paramétrage de la tâche en spécifiant la source données XML
              InputStream fis = new FileInputStream("rapports\\data\\41-1506146_Form842009_Form1.xml");// fichier XML contenant les données pour alimenter le rapport     
     
                return fis;
        }    
     
        public static void main(String[] arg) throws FileNotFoundException {
            Exemplebirt h = new Exemplebirt();
     
            try {
                h.excecuteReport();
            } catch (EngineException e) {
                // TODO Auto-generated catch block
            }
     
     
        }
    }
    Merci d'avance

  16. #16
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2009
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2009
    Messages : 529
    Points : 836
    Points
    836
    Par défaut
    Le code utilise partout des chemins relatifs, que ce soit pour le setResourcePath, le openReportDesign ou le chemin du document. Relatifs par rapport à quoi? En ésperant que le répertoire courant soit la racine du projet java? J'ai repris l'expression
    new File(...).getAbsolutePath() dans ma réponse car je pensais que tu l'avais testée dans ton contexte. Mais si ça se trouve birt n'arrive même pas à trouver le .rptdesign, tu as pourtant dit dans une des réponses que ça fonctionnait avec un rapport sans librairie... C'est plus une problématique java que birt.

  17. #17
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Citation Envoyé par donino Voir le message
    Le code utilise partout des chemins relatifs, que ce soit pour le setResourcePath, le openReportDesign ou le chemin du document. Relatifs par rapport à quoi?
    Oui le répertoire courant est bien la racine du projet java.

    Citation Envoyé par donino Voir le message
    Oui ça fonctionnait avec un rapport sans librairie. et sa fonctionne toujours sans librairie. (avec le code ci-dessous)
    Citation Envoyé par donino Voir le message
    Si c'est plus une problématique java que birt a priori mais pas très sûr là.
    j'ai replacés tous mes path avec des new File(...).getAbsolutePath(), pour être sûr, est finalement ça change rien, le message d'erreur n'a pas changé !!

    puis même j'ouvre le rapport avec Birt designer directement dans le projet (dossier rapports dans la racine du projet java) java et je fais un preview qui fonctionne très 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    import java.util.logging.Level;
    import javax.swing.JOptionPane;
     
    import org.eclipse.birt.core.framework.Platform;
    import org.eclipse.birt.report.engine.api.EngineConfig;
    import org.eclipse.birt.report.engine.api.EngineConstants;
    import org.eclipse.birt.report.engine.api.EngineException;
    import org.eclipse.birt.report.engine.api.IReportEngine;
    import org.eclipse.birt.report.engine.api.IReportEngineFactory;
    import org.eclipse.birt.report.engine.api.IReportRunnable;
    import org.eclipse.birt.report.engine.api.IRunTask;
     
    /**
     * Inspiration de http://wiki.eclipse.org/Simple_Execute_(BIRT)_2.1
     */
     
    public class Exemplebirt {
     
        public static IReportEngine engine;
        private static final String PHATH_REPORT_DESIGN = "rapports\\monRapport.rptdesign";
        private static final String PHATH_SUB_REPORT = "rapports";    
        private static final String PHATH_REPORT_DOCUMENT = "rapports\\monRapport.rptdocument";
               // static String currentDir = System.getProperty("user.dir");
     
        public Exemplebirt(){
            try {
                EngineConfig config = new EngineConfig(); //config.setEngineHome(HOME_REPORT_ENGINE);
                config.setLogConfig(null, Level.FINE);
                config.setResourcePath(new File(PHATH_SUB_REPORT).getAbsolutePath());
     
                Platform.startup(config);
                IReportEngineFactory factory = (IReportEngineFactory) Platform
                        .createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
                engine = factory.createReportEngine(config);
                engine.changeLogLevel(Level.WARNING);
     
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
            }        
        }
     
        public void excecuteReport() throws EngineException, FileNotFoundException {
            //Open the report design
            try {
                IReportRunnable design = engine.openReportDesign(new File(PHATH_REPORT_DESIGN).getAbsolutePath());
                //Create task to run the report - use the task to execute the report and save to disk.
                IRunTask task = engine.createRunTask(design);
                //Set parent classloader for engine
                task.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, Exemplebirt.class.getClassLoader());
     
                // Paramétrage de la tâche en spécifiant la source données XML
                task.getAppContext().put("org.eclipse.datatools.enablement.oda.xml.inputStream", this.build_data_xml());
     
                //run the report and destroy the engine
                task.run(new File(PHATH_REPORT_DOCUMENT).getAbsolutePath());
                task.close();
     
            } catch (EngineException e1) {
                System.out.println("[Lecture de l'état BIRT]........FAILED : " + e1.getMessage());
            }
            System.out.println("[Lecture de l'état BIRT]................OK");
            engine.destroy();
            Platform.shutdown();
            System.out.println("Fini...");
        }
     
        private InputStream build_data_xml() throws FileNotFoundException{
                // Paramétrage de la tâche en spécifiant la source données XML
                InputStream fis = new FileInputStream( new File("rapports\\data\\41-1506146_Form842009_Form1.xml").getAbsoluteFile() );  
     
                return fis;
        }    
     
        public static void main(String[] arg) throws FileNotFoundException {
            Exemplebirt h = new Exemplebirt();
     
            try {
                h.excecuteReport();
            } catch (EngineException e) {
                // TODO Auto-generated catch block
            }
     
     
        }
    }

Discussions similaires

  1. Combiner plusieurs rptdesign en un seul rapport BIRT
    Par Shimodo71 dans le forum BIRT
    Réponses: 0
    Dernier message: 13/05/2014, 12h26
  2. Réponses: 0
    Dernier message: 05/09/2008, 12h12
  3. [BIRT/RCP] Mettre à jour un rptdesign
    Par Invité dans le forum BIRT
    Réponses: 3
    Dernier message: 13/04/2007, 18h43
  4. [XSD]Api de parsing
    Par titalex dans le forum Valider
    Réponses: 5
    Dernier message: 25/01/2006, 16h19
  5. [DOM] Erreur lors du parsing d'un fichier XML par l'API DOM
    Par patricetoan dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 26/09/2005, 12h43

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