2016-08-05 41 views
0

Ich erstelle einen PDF-Bericht mit der JasperReports-Bibliothek. Ich habe diesen Bericht Ich habe einen QRCode, der Probleme macht. Ich musste viele Bibliotheken hinzufügen:NoSuchMethodError beim Generieren des JasperReport-Berichts

jasperreports, itext, itext-pdfa, itext-pdf, commons-beanutils, commons-sammlungen, commons-digester, common-logging, groovy-all, grill, barcode, barcode4j, batik -anim, Batik-Brücke, Kern, w3c.css.sac, w3c, xmlgraphics-commons, Batik-all

ich erhalte eine Ausnahme:

java.lang.ClassCastException: org.apache.batik.anim.dom.SVGOMDocument cannot be cast to org.apache.batik.dom.svg.SVGOMDocument 
at org.apache.batik.bridge.BridgeContext.setDocument(Unknown Source) 
at org.apache.batik.bridge.GVTBuilder.build(Unknown Source) 
at net.sf.jasperreports.renderers.AbstractSvgDataToGraphics2DRenderer.ensureSvg(AbstractSvgDataToGraphics2DRenderer.java:166) 
at net.sf.jasperreports.renderers.AbstractSvgDataToGraphics2DRenderer.getDimension(AbstractSvgDataToGraphics2DRenderer.java:111) 
at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.processGraphics2D(JRPdfExporter.java:1793) 
at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.process(JRPdfExporter.java:1582) 
at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.access$300(JRPdfExporter.java:1535) 
at net.sf.jasperreports.engine.export.JRPdfExporter.exportImage(JRPdfExporter.java:1475) 
at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:1093) 
at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:1056) 
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:920) 
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:537) 
at reports.JasperReport.generatePdf(JasperReport.java:178) 

Was ist falsch?

+0

Sie mis zwei verschiedene Klassen verwenden. 'anim.dom' ist nicht gleich' dom.svg' – Jens

+0

@ pulpet112 Was ist ein vollständiger Stacktrace? –

+0

@Jens Ich habe full stacktrace hinzugefügt – pulpet112

Antwort

0

Wenn dies Ihr eigener Code ist (Sie haben ihn geschrieben), liegt das daran, dass Sie die falsche SVGOMDocument-Klasse importiert haben (die zu einem anderen Java-Paket gehört). Sie sollten in der Lage sein, es schnell mit anständigen Java IDE (Eclipse, IntelliJ, NetBeans) herauszufinden.

Auch so viel wie möglich versuchen, implizite Importe zu vermeiden, wie zum Beispiel:

import org.apache.batik.dom.svg.*; 
import org.apache.batik.anim.dom.*; 

, dass Ihr Code Stabilität reduzieren könnte, zum Beispiel Zeilen, die oben hinzugefügt wurden, können Ihre Referenz des vorhandenen Arbeitscodes ändern. Verwenden Sie explizite Importe (import org.apache.batik.dom.svg.SVGOMDocument).

Finden Sie heraus, was der Rückgabetyp der Methode ist, die Sie aufrufen, und importieren Sie aus dem richtigen Java-Paket. In der Eclipse-IDE können Sie einfach den Import entfernen, der das Paket/die Klasse oben enthält, und dann Quelle> Importe organisieren (Strg-Umschalt-O) wählen.

Wenn Sie beiden Klassen in einzelner Quellcodedatei haben, müssen Sie möglicherweise vollständige Klassennamen für eine der Klassen, z.B .:

org.apache.batik.dom.svg.SVGOMDocument document = SomeLibrary.getSomething(); 
+0

Ich schreibe meinen eigenen Code, aber ich verwende diese Klassen nicht direkt. In meinem Code verwende ich JRPdfExporter, um meinen Bericht nach PDF zu exportieren. Und das ist es - diese Klassen werden von einigen anderen Jasper-Bibliotheken genannt – pulpet112