Requete dynamique iReports

Résolu
Bras36 Messages postés 5 Date d'inscription mercredi 12 juin 2013 Statut Membre Dernière intervention 12 août 2013 - 10 août 2013 à 13:37
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

8 réponses

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
12 août 2013 à 14:34
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)

--
1
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
12 août 2013 à 14:47
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 ;-)

--
1
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
12 août 2013 à 10:32
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....
0
Bras36 Messages postés 5 Date d'inscription mercredi 12 juin 2013 Statut Membre Dernière intervention 12 août 2013
Modifié par Bras36 le 12/08/2013 à 14:25
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
12 août 2013 à 14:26
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?

--
0
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 à 14:31
L'execution s'arrete, j'ai pas le JOptionPane suivant...
0
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 à 14:43
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 :-)...
0
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
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 !!!!!
0
Rejoignez-nous