2016-08-05 3 views
0

Я создаю отчет в формате PDF с использованием библиотеки JasperReports. В этом отчете у меня есть QRCode, который создает проблему. Мне пришлось добавить много библиотек:NoSuchMethodError при генерации отчета JasperReport

jasperreports, itext, itext-pdfa, itext-pdf, commons-beanutils, commons-collection, commons-digester, commons-logging, groovy-all, barbecue, barcode, barcode4j, batik -anim, батик мост, ядро, w3c.css.sac, w3c, xmlgraphics-фонд, батик всех

я получаю исключение:

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) 

Что не так?

+0

Вы MIS два различных класса. 'anim.dom' не равен' dom.svg' – Jens

+0

@ pulpet112 Что такое полная стек? –

+0

@Jens Я добавил полный stacktrace – pulpet112

ответ

0

Если это ваш собственный код (вы написали его), это просто из-за того, что вы импортировали неправильный класс SVGOMDocument (который принадлежит к разному пакету Java). Вы сможете быстро разобраться с достойной Java IDE (Eclipse, IntelliJ, NetBeans).

Кроме того, как можно попытаться избежать неявного импорта, такие как:

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

Это может снизить стабильность кода, например, добавленные выше строки могут изменить вашу ссылку на существующий рабочий код. Использовать явный импорт (импорт org.apache.batik.dom.svg.SVGOMDocument).

Узнайте, какой тип возвращаемого метода вы вызываете, и импортируйте из правильного пакета Java. В Eclipse IDE вы можете просто удалить импорт, содержащий пакет/класс выше, и выберите «Источник»> «Упорядочить импорт» (Ctrl-Shift-O).

Если у вас есть оба класса в файле одного исходного кода, вам, возможно, придется использовать полное имя класса для одного из классов, например .:

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

Я пишу свой собственный код, но я не использую эти классы напрямую. В моем коде я использую JRPdfExporter для экспорта моего отчета в pdf. И это все - эти классы называются некоторыми другими библиотеками Джаспера – pulpet112

Смежные вопросы