Получение исключения java.lang.NoSuchMethodError при использовании GWT + JasperReports

Я интегрировал JasperReports на свою платформу NetBeans и могу создавать отчеты, используя следующий код:

Map<String, Object> params = new HashMap<String, Object>();
Connection conn = DriverManager.getConnection("databaseUrl", "userid", "password");
JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, conn);
JasperExportManager.exportReportToHtmlFile(jasperPrint, reportDest);
JasperViewer.viewReport(jasperPrint);

Эта штука работает идеально.

Но я не пытаюсь интегрировать JasperReports с GWT. У меня есть сервер как сервер GlassFish.

Я получаю объект Connection, используя следующий код:

public static Connection getConnection() {
    try {
        String JNDI = "JNDI name";
        InitialContext initCtx = new InitialContext();
        javax.sql.DataSource ds = (javax.sql.DataSource) initCtx.lookup(JNDI);
        Connection conn = (Connection) ds.getConnection();
        return conn;
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return null;
}

а потом

Map<String, Object> params = new HashMap<String, Object>();
JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, getConnection());
JasperExportManager.exportReportToHtmlFile(jasperPrint, reportDest);
JasperViewer.viewReport(jasperPrint);

но я всегда получаю ошибку. Вот трассировка стека:

com.google.gwt.user.server.rpc.UnexpectedException: 
Service method 'public abstract java.lang.Boolean com.client.service.GenerateReport()'
threw an unexpected exception: java.lang.NoSuchMethodError: 
net.sf.jasperreports.engine.fonts.SimpleFontFamily.setExportFonts(Ljava/util/Map‌​);

Я реализую это на сервере. У меня есть вызовы RPC, чтобы заставить этот метод работать при нажатии кнопки.

Не могли бы вы помочь мне, как работать над этим. (То есть интегрировать JasperReports с GWT).

Я был бы очень признателен за любое объяснение с некоторым кодом, так как я всего лишь новичок.

Спасибо


person Barry    schedule 07.05.2010    source источник
comment
Да, лучшая классификация ошибок определенно поможет.   -  person markovuksanovic    schedule 07.05.2010
comment
Ошибка, которую я получаю: com.google.gwt.user.server.rpc.UnexpectedException: метод службы «public abstract java.lang.Boolean com.client.service.GenerateReport()» вызвал неожиданное исключение: java.lang. NoSuchMethodError: net.sf.jasperreports.engine.fonts.SimpleFontFamily.setExportFonts(Ljava/util/Map);   -  person Barry    schedule 11.05.2010
comment
Вы получили ответ. Я по тому же вопросу? Спасибо   -  person    schedule 11.08.2011
comment
Я думаю, что проблема в том, что клиентская и серверная стороны используют разные версии библиотеки JasperReports. Первым шагом к решению этой проблемы является использование той же версии библиотеки JR.   -  person Alex K    schedule 06.02.2012


Ответы (1)


Без помощи сообщений об ошибках я бы сказал, что у вас включен Google App Engine в настройках вашего проекта eclipse. GAE НЕ позволяет вам записывать данные в файловую систему или выполнять вызовы базы данных.

Попробуйте отключить GAE, и все должно работать нормально.

person Sripathi Krishnan    schedule 07.05.2010
comment
@Максим - он намеренно не использует GAE. Плагин GWT eclipse по умолчанию имеет включенный GAE. Многие, многие люди включили его по умолчанию и осознают это только тогда, когда сталкиваются с исключением, не слишком отличающимся от вставленного выше. - person Sripathi Krishnan; 09.05.2010
comment
Как отключить GAE в Netbeans? - person Barry; 11.05.2010
comment
Netbeans не имеет подключаемого модуля GWT, поэтому, если вы не загрузили GAE и не включили jar-файлы, я не думаю, что проблема в GAE. Поскольку вы получаете NoSuchMethodError, возможно, у вас есть конфликтующие банки в вашем пути к классам. Я предполагаю, что две банки имеют разные версии net.sf.jasperreports.engine.fonts.SimpleFontFamily. - person Sripathi Krishnan; 11.05.2010
comment
Я очистил свою библиотеку и убедился, что у меня есть только одна копия файлов jar в моей библиотеке. Но все же я получаю ту же ошибку, которую я копировал ранее. Есть ли что-то, чего мне еще не хватает? - person Barry; 11.05.2010