Publié par : collaborateurvdu | novembre 12, 2007

Comment hacker Jasper Reports

Cela part d’un bon sentiment. Tous mes chers confrères qui travaillent dans le milieu du développement informatique me comprendront, la perte d’un travail effectué est une chose vexante. C’est d’autant plus vexant au moment où l’on doit rendre des comptes. C’est ce qui m’est arrivé très récemment; un client m’a réclamé des sources d’éditions JasperReports qui n’avaient jamais été publiées sur le CVS du projet.

A ce point précis, seul un miracle pouvait me sauver, car à priori avec seulement un fichier binaire d’édition, je ne pouvais pas faire grand chose. Une solution élégante m’a été proposée par un collègue, je me permets donc de la partager avec vous ici.

Voici un programme Java qui permet de passer d’un fichier finaire Jasper Reports (extension .jasper) à un fichier source Jasper Reports (ouvrable avec iReport par exemple) :

 

package net.free.vdu.tools;

import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.engine.xml.JRXmlWriter;

/**
 * Classe permettant de passer d'un fichier binaire .jasper
 * (Jasper Reports) à un fichier source .jrxml
 * @author JasperSoft, VDU
 * @version 1.0
 */
class JasperToJrxml {

   public static void main(String [] args) {
      // Chemin du fichier binaire .jasper
      final String sourcePath = args[0];

      // Chemin du fichier source généré .jrxml
      final String outputPath = args[0].replace(".jasper", ".jrxml");

      // Génération du fichier source à partir du fichier binaire
      generateJrxmlFile(sourcePath, outputPath);
   }

   /**
    * Méthode de génération du fichier source à partir du fichier binaire
    * @param pSourcePath le chemin du fichier binaire en entrée
    * @param pOutputPath le chemin du fichier source généré en sortie
    */
   public static void generateJrxmlFile(String pFileName, String pSourcePath, String pOutputPath) {
      try {
         // Chargement du fichier binaire sous forme d'objet JasperReport
         final JasperReport jasperReport = (JasperReport) JRLoader.loadObject(sourcePath);

         // Ecriture du XML généré à partir de l'objet JasperReport dans le fichier de sortie
         JRXmlWriter.writeReport(jasperReport, outputPath, "UTF-8");

      } catch(JRException e) {
         e.printStackTrace();
      }
   }
}

 

Voici comment utiliser ce programme :

 

javac -cp .: JasperToJrxml.java
java -cp .: net.free.vdu.tools.JasperToJrxml

Et voilà, plus qu’à récupérer votre fichier source .jxrxml !


Répondre

Votre réponse :

Catégories