Requete dynamique iReports [Résolu]

Messages postés
5
Date d'inscription
mercredi 12 juin 2013
Statut
Membre
Dernière intervention
12 août 2013
- - Dernière réponse : Bras36
Messages postés
5
Date d'inscription
mercredi 12 juin 2013
Statut
Membre
Dernière intervention
12 août 2013
- 12 août 2013 à 15:08
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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
1
Merci
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)

--

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 154 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cormandyr
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
1
Merci
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 ;-)

--

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 154 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cormandyr
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
0
Merci
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....
Commenter la réponse de cormandyr
Messages postés
5
Date d'inscription
mercredi 12 juin 2013
Statut
Membre
Dernière intervention
12 août 2013
0
Merci
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...
Commenter la réponse de Bras36
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
0
Merci
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?

--
Commenter la réponse de cormandyr
Messages postés
5
Date d'inscription
mercredi 12 juin 2013
Statut
Membre
Dernière intervention
12 août 2013
0
Merci
L'execution s'arrete, j'ai pas le JOptionPane suivant...
Commenter la réponse de Bras36
Messages postés
5
Date d'inscription
mercredi 12 juin 2013
Statut
Membre
Dernière intervention
12 août 2013
0
Merci
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 :-)...
Commenter la réponse de Bras36
Messages postés
5
Date d'inscription
mercredi 12 juin 2013
Statut
Membre
Dernière intervention
12 août 2013
0
Merci
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 !!!!!
Commenter la réponse de Bras36