# JasperReport in JavaDatei einbauen



## JGott (10. August 2005)

Hallo Leute,

habe soeben mit iReport meinen JasperReport fertig gebaut und wollte nun diesen in mein JavaProjekt einbauen! Es funktionier aber einfach nicht kann mir jemand ein Beispiel schreiben wie ich die .jasper datei oder die .jrxml datei auf ein Panel bekomme?

Danke im Voraus


----------



## elmato (10. August 2005)

Was meinst du bitte mit "auf ein Panel bekommen"? Wenn du dir deinen mit Daten gefuellten Report anschauen moechtest muss du das mit dem JasperViewer machen. Oder moechtest du wissen wie du den Report mit Daten fuellst?


----------



## JGott (10. August 2005)

Jo will den Report anschauen dachte man kann den Viewer auf ein Panel legen, kannst aber gern mal schreiben wie man den Report anschaut in JavaCode


----------



## elmato (11. August 2005)

```
JRViewer viewer = new JRViewer( JasperFillManager.fillReport(fNameJasper, parameters, connection));
```
damit hast du einen JasperViewer, ich habe gerade nachmal nachgelesen und selbiger erbt von JPanel, also solltest du keine weiteren Probleme haben, es darzustellen..
mfg


----------



## JGott (11. August 2005)

Hallo,

habe mal folgendes gemacht aber irgendwie stimmt da was net!


```
public void jasper() throws Exception {

     try {
     java.sql.Connection conn = null;
     java.util.Map map = null;
     JRViewer viewer = new JRViewer(JasperFillManager.fillReport("lieferschein.jasper", map, conn));
     billi.add(viewer);
     }
        catch (Exception e) {
         e.printStackTrace();
     }
    }
```

Fehler:

java.io.InvalidClassException: net.sf.jasperreports.engine.base.JRBaseReport; local class incompatible: stream classdesc serialVersionUID = 607, local class serialVersionUID = 10000
	at java.ibjectStreamClass.initNonProxy(ObjectStreamClass.java:519)
	at java.ibjectInputStream.readNonProxyDesc(ObjectInputStream.java:1546)
	at java.ibjectInputStream.readClassDesc(ObjectInputStream.java:1460)
	at java.ibjectInputStream.readNonProxyDesc(ObjectInputStream.java:1546)
	at java.ibjectInputStream.readClassDesc(ObjectInputStream.java:1460)
	at java.ibjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
	at java.ibjectInputStream.readObject0(ObjectInputStream.java:1299)
	at java.ibjectInputStream.readObject(ObjectInputStream.java:339)
	at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:85)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:161)
	at ecobill.module.base.ui.DeliveryOrderUI.jasper(DeliveryOrderUI.java:71)
	at ecobill.module.base.ui.DeliveryOrderUI.afterPropertiesSet(DeliveryOrderUI.java:114)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:962)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:354)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:223)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:176)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:105)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:916)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:727)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:336)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:223)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:312)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:80)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56)
	at Start.main(Start.java:29)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:78)

NESTED BY :
java.io.InvalidClassException: net.sf.jasperreports.engine.base.JRBaseReport; local class incompatible: stream classdesc serialVersionUID = 607, local class serialVersionUID = 10000
	at java.ibjectStreamClass.initNonProxy(ObjectStreamClass.java:519)
	at java.ibjectInputStream.readNonProxyDesc(ObjectInputStream.java:1546)
	at java.ibjectInputStream.readClassDesc(ObjectInputStream.java:1460)
	at java.ibjectInputStream.readNonProxyDesc(ObjectInputStream.java:1546)
	at java.ibjectInputStream.readClassDesc(ObjectInputStream.java:1460)
	at java.ibjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
	at java.ibjectInputStream.readObject0(ObjectInputStream.java:1299)
	at java.ibjectInputStream.readObject(ObjectInputStream.java:339)
	at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:85)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:161)
	at ecobill.module.base.ui.DeliveryOrderUI.jasper(DeliveryOrderUI.java:71)
	at ecobill.module.base.ui.DeliveryOrderUI.afterPropertiesSet(DeliveryOrderUI.java:114)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:962)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:354)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:223)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:176)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:105)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:916)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:727)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:336)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:223)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:312)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:80)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56)
	at Start.main(Start.java:29)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:78)

NESTED BY :
net.sf.jasperreports.engine.JRException: Error loading object from file : lieferschein.jasper
	at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:89)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:161)
	at ecobill.module.base.ui.DeliveryOrderUI.jasper(DeliveryOrderUI.java:71)
	at ecobill.module.base.ui.DeliveryOrderUI.afterPropertiesSet(DeliveryOrderUI.java:114)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:962)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:354)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:223)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:176)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:105)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:916)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:727)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:336)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:223)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:312)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:80)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56)
	at Start.main(Start.java:29)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:78)
Caused by: java.io.InvalidClassException: net.sf.jasperreports.engine.base.JRBaseReport; local class incompatible: stream classdesc serialVersionUID = 607, local class serialVersionUID = 10000
	at java.ibjectStreamClass.initNonProxy(ObjectStreamClass.java:519)
	at java.ibjectInputStream.readNonProxyDesc(ObjectInputStream.java:1546)
	at java.ibjectInputStream.readClassDesc(ObjectInputStream.java:1460)
	at java.ibjectInputStream.readNonProxyDesc(ObjectInputStream.java:1546)
	at java.ibjectInputStream.readClassDesc(ObjectInputStream.java:1460)
	at java.ibjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
	at java.ibjectInputStream.readObject0(ObjectInputStream.java:1299)
	at java.ibjectInputStream.readObject(ObjectInputStream.java:339)
	at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:85)
	... 25 more

Fehler ENDE!

billi ist mein Panel! 
kannst du mir weiterhelfen?

wie muss so eine map und connection aussehen! Find da nirgends was dazu! Danke


----------



## JGott (11. August 2005)

Ich denke ich habe das Problem jetzt ein bisschen weiter gelöst in dem ich den Report zuerst kompiliere!


```
public void jasper() throws Exception {

     try {
     java.sql.Connection conn = null;
     java.util.Map map = null;
     JasperReport js = JasperCompileManager.compileReport("lieferschein.jasper");
     JRViewer viewer = new JRViewer(JasperFillManager.fillReport(js, map, conn));
     billi.add(viewer);
     }
        catch (Exception e) {
         e.printStackTrace();
     }
    }
```

Fehler:
java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester
	at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:142)
	at ecobill.module.base.ui.DeliveryOrderUI.jasper(DeliveryOrderUI.java:71)
	at ecobill.module.base.ui.DeliveryOrderUI.afterPropertiesSet(DeliveryOrderUI.java:114)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:962)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:354)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:223)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:176)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:105)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:916)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:727)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:336)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:223)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:312)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:80)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56)
	at Start.main(Start.java:29)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:78)

Fehler Ende!

Ich glaube es liegt jetzt nur noch an der Connection und der Map bei denen ich aber nicht weiter weiß! 

Danke schonmal


----------



## elmato (12. August 2005)

Tja das Problem das bei dir Auftritt trat auch bei mir auf und zu meiner Schande muss ich gestehen es nie geloest bekommen zu haben.
Die erst frage ist erstmal ob du alle benoetigten externen Librarys hast, das waren Commons-Digester, Commons-Loging und noch andere(die Liste der benoetigen Lib's findest du auf der JasperReport Homepage)
Lade dir die ensprechenden Lib's tunter, binde sie ein und versuche es nochmal. Bei mir hat es wie gesagt nie funktioniert und auch nach ausfuehrlicher recherche im Internet kam ich zu keiner Loesung. Das was ich gefunden habe ist das JasperReports da einem wahren Versionsdschungel gleicht, sprich eine Version des Digesters funktioniert eine andere nicht...
Wenn du ein Loesung finden solltest waere ich dir Verbunden wenn du sie Posten koenntest ich waere sehr daran interessiert(hab Tage damit vergeudet es nicht zum laufen zu bringen  )
Das einzige was ich dir anbieten kann is ein Workaroud, du kannst den fertigen Report auch mit iReport kompilieren lassen und die daraus erzeuge .jasper Daeti mit dem JasperFillManager fuellen.
Hierbei ist zu beachten das deine iReport und die JasperReoprt Versionen uebereinstimmen, dan sonst funktioniert es auch nicht. Ich benutze zur Zeit JasperReports 0.6.7 und iReport 0.5.0.
Wenn du dann deinen Report mittels iReport compiliert hast musst du folgenden code verwenden

```
JasperFillManager.fillReport("deinJasperFile.jasper", map, new JRTableModelDataSource(model));
```
und kannst damit den Report fuellen und jenachdem was du dann machen moechtest weiter Verarbeiten.
Ich hoffe ich konnte dir ein wenig helfen, wenn du eine Loesung fuer oben genanntes Problem findest bitte bitte hier posten  ansonsten viel Erfolg 
mfg

edit:
Noch in paar Sachen die mir an deinem Code aufgefallen sind.
du uebergibst zwar eine connection aber sagst JasperReports nicht um welche art von Dataset es sich handelt in deinem falle muesste es glaube ich heissen

```
JasperFillManager.fillReport(file_name_jasper, parameters, new JRResultSetDataSource(con));
```
und was auch noch fehlt zum compileiren ist folgende zeile

```
System.setProperty("org.xml.sax.driver","org.apache.xerces.parsers.SAXParser");
```
damit machst du dem System den SAXParser bekannt, wobei das bei mir wie schon gesagt nie funktioniert hat...
mfg


----------



## JGott (12. August 2005)

Servus,

ich habe das Problem jetzt in Zusammenarbeit mit nem Kumpel gelöst,

hier mal mein Code:


```
public void jasper() throws Exception {

        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }

        Connection con = null;
        try {
            // name der datenbank, user, passwort
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ecobill", "root", "x2kub2");

            // compiliert report
            JasperReport js = JasperCompileManager.compileReport("lieferschein.jrxml");
            // macht report zu PDF
            JasperRunManager.runReportToPdf(js, new HashMap(), con);
            JRViewer viewer = new JRViewer(JasperFillManager.fillReport(js, new HashMap(), con));
            bill.add(viewer, BorderLayout.CENTER);

        } catch (SQLException e1) {
            e1.printStackTrace();
        } finally {
            if (con != null)
                try {
                    con.close();
                } catch (SQLException e2) {
                    e2.printStackTrace();
                }
        }
    }
```

eingebunden hab ich die commons-logging-1.0.4.jar,  commons-digester-1.7.jar, commons-beanutils.jar, und die itext-1.3.jar (diese braucht man aber nur für das umwandeln ins pdf).

Nun kommt bei mir der JRViewer schön auf dem Panel (Panel heißt bill)  und ich kann aus ihm heraus drucken und den Report als Pdf speichern!

Klappt prima!
Hoffe konnte dir jetzt helfen bei weiteren fragen einfach posten!


----------

