Requete dynamique iReports [Résolu]

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

8 réponses

Répondre au sujet
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 12 août 2013 à 14:34
+1
Utile
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)

--
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cormandyr
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 12 août 2013 à 14:47
+1
Utile
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 ;-)

--
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cormandyr
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 12 août 2013 à 10:32
0
Utile
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
Bras36 5 Messages postés mercredi 12 juin 2013Date d'inscription 12 août 2013 Dernière intervention - Modifié par Bras36 le 12/08/2013 à 14:25
0
Utile
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
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 12 août 2013 à 14:26
0
Utile
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
Bras36 5 Messages postés mercredi 12 juin 2013Date d'inscription 12 août 2013 Dernière intervention - 12 août 2013 à 14:31
0
Utile
L'execution s'arrete, j'ai pas le JOptionPane suivant...
Commenter la réponse de Bras36
Bras36 5 Messages postés mercredi 12 juin 2013Date d'inscription 12 août 2013 Dernière intervention - 12 août 2013 à 14:43
0
Utile
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
Bras36 5 Messages postés mercredi 12 juin 2013Date d'inscription 12 août 2013 Dernière intervention - 12 août 2013 à 15:08
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.