Fehler beim laden von Jasper-Datei mit JRLoader (ireport)

garcuen

Grünschnabel
Versuche folgendermaßen eine vorkompilierte Jasper-Datei zu laden um Zeit zu sparen.

File temp = new File("src/reports/JR_Lieferung.jasper");
JasperReport report = (JasperReport)JRLoader.loadObject(temp);


Ich bekomme folgende Exception:
Exception in thread "main" java.lang.RuntimeException: net.sf.jasperreports.engine.JRException: Error loading object from file : src\reports\JR_Lieferung.jasper
at de.arvatologistics.pclexport.ExportMain.printParameters(ExportMain.java:139)
at de.arvatologistics.pclexport.ExportMain.getMap(ExportMain.java:409)
at de.arvatologistics.pclexport.ExportMain.main(ExportMain.java:502)


Die Pfadangabe ist richtig, habe ich mit temp.isFile() überprüft.
Hoffe mir kann jemand helfen......
 
Zuletzt bearbeitet:
Hi
Nun, der normale Aufruf eines vorkompilierten Reports sieht ein bisschen anders aus.

Java:
JasperPrint jp = JasperFillManager.fillReport(url.openStream(), //url = URL zur japserDatei
                    parameters, //HashMap mit den Parametern, wenn du keine Parameter brauchst überbig eine leere Hashmap
                    new JRBeanCollectionDataSource(inspBean)); //inspBean = Vector mit Beans drin, die die Daten für den Bericht beinhalten.

Dieses jp Objekt ist nun dein abgefüllter Report und kann mit:
new JRViewer(jp)
auf deiner Obefläche platziert werden (JRViewer erbt von JPanel, kann also wie ein JPanel ihrgendwohin platziert werden)


Nochmals der Aufruf ohne Komentare:
Java:
JasperPrint jp = JasperFillManager.fillReport(url.openStream(), parameters,
                    new JRBeanCollectionDataSource(inspBean));
jrviewer = new JRViewer(jp);

Gruss
jeipack
 
Danke für deine Hilfe erstmal!
Hab's jetzt folgendermaßen:

data = new JREmptyDataSource();
InputStream stream = ClassLoader.getSystemResourceAsStream("reports/JR_Lieferung.jasper");
JasperPrint jp = JasperFillManager.fillReport(stream, parameters, data);
JRViewer jrviewer = new JRViewer(jp);


Parameters wird bereits im Methodenkopf übergeben und ist gefüllt.
Bekomme nun aber folgende Exception:
net.sf.jasperreports.engine.JRException: Error loading object from InputStream
at de.arvatologistics.pclexport.ExportMain.printParameters(ExportMain.java:155)
at de.arvatologistics.pclexport.ExportMain.getMap(ExportMain.java:425)
at de.arvatologistics.pclexport.ExportMain.main(ExportMain.java:518)
 
Mhh sieht eigentlich gut aus
Schau mal ob ClassLoader.getSystemResourceAsStream("reports/JR_Lieferung.jasper") wirklich dass macht was es soll.

ansonsten versuchs mal so:
stream = (this.getClass().getResource("reports/JR_Lieferung.jasper")).openStream();
 
Bringt leider auch nichts. Bekomme jetzt eine andere Exception:

Exception in thread "main" java.lang.RuntimeException: net.sf.jasperreports.engine.JRException: Class not found when loading object from InputStream
at de.arvatologistics.pclexport.ExportMain.printParameters(ExportMain.java:164)
at de.arvatologistics.pclexport.ExportMain.getMap(ExportMain.java:434)
at de.arvatologistics.pclexport.ExportMain.main(ExportMain.java:529)

Hat es vielleicht etwas mit der Java-Datei zu tun die beim Kompilieren erstellt wird?! Muss ich die vieleicht irgendwo hinkopieren.
 
Der Inputstream stimmt nicht.. er findet also ihrgendwie die Datei JR_Lieferung.jasper nicht.

Debug dein Projekt mal und sag mir was
this.getClass().getResource("reports/JR_Lieferung.jasper") zurück gibt.

Gruss
 
folgendes wird ausgegeben:
java.io.BufferedInputStream@3820e

wenn ich bewusst einen falschen Pfad angebe wird eine NullPointerException ausgegeben.

Hast du vielleicht eine Beispielanwendung in der eine Vorkompilierte Jasperdatei geladen wird?! Dann kann ich die mal bei mir testen,der Code müsste eigentlich richtig sein.

LG
 
Nun.. mein Code ist genau aus einer Beispielanwendung, mehr darf ich nicht posten, aber es würde auch nichts bringen, weil es nicht mehr erklähren würde.

Also der ResourceGetter funktioniert und der InputStream ist ein Stream von diesem File?

Hast du JapserReports so eingebunden dass du es debugen kannst? Wenn ja würde ich mal die Klasse JRLoader.java debugen (liegt in net.sf.jasperreports.engine.util)

Der für dich relevante Teil:
Java:
public static Object loadObject(InputStream is) throws JRException
	{
		Object obj = null;

		ObjectInputStream ois = null;

		try
		{
			ois = new ObjectInputStream(is);
			obj = ois.readObject();
		}
		catch (IOException e)
		{
			throw new JRException("Error loading object from InputStream", e);
		}
		catch (ClassNotFoundException e)
		{
			throw new JRException("Class not found when loading object from InputStream", e);
		}
		finally
		{
			//FIXMENOW should not close the stream
			if (ois != null)
			{
				try
				{
					ois.close();
				}
				catch(IOException e)
				{
				}
			}
		}

		return obj;
	}

Dies könntest du mit deinem InputStream auch gleich selbst ausprobieren:
ObjectInputStream ois = new ObjectInputStream(stream); //hier deinen Stream einfügen
Object obj = ois.readObject();

und schauen was hier so für exceptions geworfen werden.

Gruss
 
Habe JasperReports nur als .jar eingebunden, kann es also nicht debuggen.

Habe folgendes fehlerfrei ausführen können:

Code:
InputStream stream = (this.getClass().getResource("/reports/JR_Lieferung.jasper")).openStream();
ObjectInputStream ois = new ObjectInputStream(stream); 
Object obj = ois.readObject();


Bekomme aber bei diesem Versuch eine Exception, durch den letzten Befehl verursacht wird:

Code:
InputStream stream = (this.getClass().getResource("/reports/JR_Lieferung.jasper")).openStream();
ObjectInputStream ois = new ObjectInputStream(stream); //hier deinen Stream einfügen
Object obj = ois.readObject();
report = (JasperReport)JRLoader.loadObject(obj.toString());

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: net.sf.jasperreports.engine.JasperReport@104c575
 
Zuletzt bearbeitet:
Funktioniert jetzt folgendermaßen:

Code:
stream = (this.getClass().getResource("/reports/"+dateiname+".jasper")).openStream();
ois = new ObjectInputStream(stream); //hier deinen Stream einfügen
obj = ois.readObject();
report = (JasperReport)obj;

Danke für die Hilfe
 
Zurück