Scriptlet.class in Web-App importieren

Hallo an alle Experten!

Ich bin am erstellen einer Web-App in JSP.In der App möchte ich ein
Report laden und als HTML-Datei anzeigen lassen.

Funktioniert auch ganz gut…aber sobald ich eine Report in iReport
erstellt habe, dass ein Scriplet.class verwendet und diese dann
natürlich in meiner Web-App laden muss, bekomme ich eine
„java.lang.ClassNotFoundException“ Fehlermeldung.


Hier ein Auszug aus der Klasse die das Report generieren soll:

File loadCL = new File(„C:\jakarta-tomcat-5.0.28\webapps\
\iReport\ficheroJasper\Scriptlet.class“);

Class loadClass = null;
loadClass = JRClassLoader.loadClassForName(className);

Die Fehlermeldung erscheint nach der letzen Zeile
(loadClass = JRClassLoader…)

Ich hoffe Ihr könnt mir weiter helfen. Bestimmt muss ich die
Scriptlet.class in einen bestimmte Ordner legen, obwohl die
Pfadangabe doch ausreichen sollte?!

Vielen Dank schon mal im Voraus

Natürlich muss ich loadCL laden:

loadClass = JRClassLoader.loadClassForName(loadCL);

Auch hallo.

Hallo an alle Experten!

…oh :heart: :wink:

Ich bin am erstellen einer Web-App in JSP.In der App möchte
ich ein
Report laden und als HTML-Datei anzeigen lassen.

Resourcen: Eclipse 3.x sowie Jasper Report Plugin ? Davon gibt es übrigens ein Neues: http://www.javamagazin.de/itr/news/psecom,id,27942,n…

Funktioniert auch ganz gut…aber sobald ich eine Report in
iReport
erstellt habe, dass ein Scriplet.class verwendet und diese
dann
natürlich in meiner Web-App laden muss, bekomme ich eine
„java.lang.ClassNotFoundException“ Fehlermeldung.


Hier ein Auszug aus der Klasse die das Report generieren soll:

File loadCL = new File(„C:\jakarta-tomcat-5.0.28\webapps\
\iReport\ficheroJasper\Scriptlet.class“);

Werden Pfade unter Windows nicht mit nur einem ‚‘ angegeben ?
Sofern das Javaprogramm die Berechtigung zum Filesystem Zugriff überhaupt hat.

Class loadClass = null;
loadClass = JRClassLoader.loadClassForName(className);

Die Fehlermeldung erscheint nach der letzen Zeile
(loadClass = JRClassLoader…)

Ich hoffe Ihr könnt mir weiter helfen. Bestimmt muss ich die
Scriptlet.class in einen bestimmte Ordner legen, obwohl die
Pfadangabe doch ausreichen sollte?!

Schwerer zu sagen, so ohne Resourcen… :frowning:

HTH
mfg M.L.

***freies ebook EJB Design Patterns***
http://www.theserverside.com/books/wiley/EJBDesignPa… (Registrierung erforderlich :wink: )

Hi,

ich habe das gleiche Problem in einer Web Anwendung mit JasperReports noch auf dem Schreibtisch liegen. Ich wollte dazu mal den Quelltext von dem JasperPortal für JBoss studieren. Dort haben sie eine Klasse Repository die für das Laden des Reports verantwortlich ist, es wird ein eigener (URL)Classloader verwendet, der dann an JasperReport übergeben wird. Am besten Du schaust Dir das dort ab. Falls Du die Lösung gefunden hast, dann bitte unbedingt hier posten :smile: Ich schau mal ob ich demnächst dazu komme…

Viele Grüße

Bonkers

LÖSUNG: Scriptlet.class in Web-App importieren
Hallo an alle,

ich habe das Problem lösen können!!!
Es gibt bestimmt auch noch andere Möglichkeiten, aber mit dieser Lósung funtioniert es sicher!!!

Für die Erstellung der jasper-File habe ich iReport 1.2.0 verwendet.
Die Klasse, die ich importieren möchte heisst:

primeroProyectoScriptlet.class

aus ihr habe ich ein JAR-File generiert und anschliessend in dass Verzeichnis „WEB-INF\lib“ gelegt. Ausserdem wird die Klasse
„IReportScriptlet.class“ benötigt (Siehe in primeroProyectoScriptlet.class: extends it.businesslogic.ireport.IReportScriptlet).
Sie befindet sich unter „iReport\classes“. Nehme einfach den ganzen Orner „it“ und erzeuge ein ZIP.Archiv und ändere den Dateityp in „.jar“. Zum Schluss noch diese Jar-Datei in „WEB-INF\lib“ ablegen.
Das wars schon, viel Spass dabei :smile:

(Ich arbeite zur Zeit in Spanien, deshalb sind die vewendendeten Datei- und Variablennamen vielleicht für den einen oder anderen nicht verständlich. Sollte denoch nachvollziehbar sein)

Quellcode:

public class GestionReport extends Action implements java.io.Serializable
{
public GestionReport(){}

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
int TurnoValorStart = 1;
int TurnoValorEnd = 1;
try{

String sql = null;
String driver = „com.mysql.jdbc.Driver“;
String connectString = „jdbc:mysql://10.***.31.110/cabildo_pruebas“;
String user = „****“;
String password = „****“;
Class.forName(driver);
String className = null;
File reportFile = new File(„C:\jakarta-tomcat-5.0.28\webapps\iReport\ficheroJasper\primeroProyecto.jasper“);
String FileDestino =„C:\jakarta-tomcat-5.0.28\webapps\iReport\primeroProjecto.html“;
String loadCL_Scriptlet =„primeroProyectoScriptlet“;

Connection conn = DriverManager.getConnection(connectString, user, password);
if(conn!= null)
{System.out.println("\n- Connection a la base de datos ha sido con exito -\n");}
else System.out.println("\n- Connection a la base de datos ha fallado -\n");

JasperReport jasR = (JasperReport) JRLoader.loadObject(reportFile);
className = jasR.getScriptletClass();

Class loadClass = null;
loadClass = JRClassLoader.loadClassForName(loadCL_Scriptlet);

Map parameters = new HashMap();
parameters.put(JRParameter.REPORT_SCRIPTLET,loadClass);
parameters.put(„TURNO_START“,new Integer(TurnoValorStart));
parameters.put(„TURNO_END“,new Integer(TurnoValorEnd));

JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters,conn);
JasperExportManager.exportReportToHtmlFile(jasperPrint,FileDestino);

}
catch(Exception e3)
{ System.out.println(e3);
}
return new ActionForward("/primeroProyecto.html");