Requete dynamique iReports [Résolu]

Signaler
Messages postés
5
Date d'inscription
mercredi 12 juin 2013
Statut
Membre
Dernière intervention
12 août 2013
-
Messages postés
5
Date d'inscription
mercredi 12 juin 2013
Statut
Membre
Dernière intervention
12 août 2013
-
Bonjour à tous,

Je reviens pour demander votre aide dans ce débuts difficiles de mes développement web :(

J'avais une application Java/Swing où je faisais apparaître un état "Jasper Reports". J'essaye de faire la même chose dans une nouvelle application Java EE/JSF. Pour le faire j'utilise le code ci-dessous, qui marchait très bien avec mon premier projet Swing:
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JRDesignQuery;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import java.util.HashMap;
import java.util.Map;

public JasperPrint loadReport() throws SQLException{
        Connection myConn = null;
	JasperPrint result = new JasperPrint();
	try{
		result = new JasperPrint();
		String osdSql="SELECT ... " +
	        	           "FROM ... " + 
	        		   "GROUP BY ... " +
	        		   "HAVING ...";
		String jasperFile= "C:\\netdados\\EclipseProjectsWeb\\og\\WebContent\\reports\\rptOsdDem.jrxml";
		JasperDesign jasperDesign = JRXmlLoader.load(jasperFile);
		JRDesignQuery query = new JRDesignQuery();
		query.setText(osdSql);
		jasperDesign.setQuery(query);
		JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("statM1", strMoisF.format(dateTimeDiffere("month", -1).getTime()));
	        parameters.put("statM2", strMoisF.format(dateTimeDiffere("month", -2).getTime()));
		parameters.put("statM3", strMoisF.format(dateTimeDiffere("month", -3).getTime()));
		myConn = dataSource.getConnection();
		result = JasperFillManager.fillReport(jasperReport, parameters, myConn); 
	}catch(Exception e){
		JOptionPane.showMessageDialog(null, e.getMessage());
	}finally{
		if (myConn!=null) myConn.close();
	}
	return result;
}


Pour une raison quelconque j'ai un soucis dans la ligne JasperDesign jasperDesign = JRXmlLoader.load(jasperFile);, mais je n'ai aucune message d'erreur qu'est affiché par mon bloque Try/Catch.

Après avoir passé une journée sans arriver à rien trouver, je reviens donc à demander votre avis... :oops:

Je vous remercie d'avance pour toute aide,
Marc

8 réponses

Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
si cela tourne sur un serveur, tu dois avoir un log du serveur... tu aura ptet des informations à ce moment... genre ClassNotFoundException ou un truc du style.... (meme si en théorie elle devrait être catchée par le try/catch)

--
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
Comme ça je te dirais que le *.jar de jarsperReport n'est pas dans le classpath de ton serveur...
Il te faudrait donc founir à tomcat le jar de jasperReport ;-)

--
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
Salut,

tout d'abord, je ne suis pas un expert dans le développement web, mais je vais quand même essayer de t'aider...
Je suppose que serveur tourne sur ta machine de dev et est sous windows, mais je ne pense pas qu'un chemin d'accès absolu comme
		String jasperFile= "C:\\netdados\\EclipseProjectsWeb\\og\\WebContent\\reports\\rptOsdDem.jrxml";
soit une bonne chose...
Je suppose que tu déploes un fichier war ou qqch comme ça... si oui, je te conseille de packager ton template IReport dans le war et de faire un chemin d'accès relatif....
Messages postés
5
Date d'inscription
mercredi 12 juin 2013
Statut
Membre
Dernière intervention
12 août 2013

Merci cormandyr.

J'ai essayé aussi le code
String jasperFile= getServletContext().getRealPath("/") + "reports\\rptOsdDem.jrxml";
 JOptionPane.showMessageDialog(null, jasperFile);
 JasperDesign jasperDesign = JRXmlLoader.load(jasperFile);
 JOptionPane.showMessageDialog(null, "ok");


J'ai bien le chemin de mon report dans le JOptionPane mais il bloque toujours à la commande JRXmlLoader.load...
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
et tu n'as vraiment rien comme info sur l'exception?
si tu fais un e.printStackTrace(), rien du tout?

quand tu dis que tu as un soucis à cette ligne (load....) quel est exactement le soucis?

--
Messages postés
5
Date d'inscription
mercredi 12 juin 2013
Statut
Membre
Dernière intervention
12 août 2013

L'execution s'arrete, j'ai pas le JOptionPane suivant...
Messages postés
5
Date d'inscription
mercredi 12 juin 2013
Statut
Membre
Dernière intervention
12 août 2013

T'avais raison, malgré l'absence d'erreur Try/Catch, j'ai trouvé un log dans le dossier de TomCat:

Message=java.lang.NoClassDefFoundError

Il va falloir maintenant qui j'essaye de le comprendre :-)...
Messages postés
5
Date d'inscription
mercredi 12 juin 2013
Statut
Membre
Dernière intervention
12 août 2013

J'ai remplacé quelques .jar qui j'avais dans mon classpath et il a l'air de marcher maintenant...

Merci beaucoup de ton aide cormandyr,
Je vais finalement pouvoir avancer !!!!!