powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / jasperreports + JEE (EJB/JPA)
25 сообщений из 73, страница 1 из 3
jasperreports + JEE (EJB/JPA)
    #38895040
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте форумчане!
помогите разобраться с jasperreports'ом.
1) есть jsp страница и в нем ссылка на сервлет
Код: java
1.
<a href="report?id=${a.idabiturient}">PDF</a>



2) сервлет Report
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
.....
            JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(list);
            System.out.println("nach"); //начало проверки
            String reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reports/report.jasper");
            jasperPrint = JasperFillManager.fillReport(reportPath, new HashMap(), beanCollectionDataSource);

            HttpServletResponse httpServletResponse =
                (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
            System.out.println(httpServletResponse); //для проверки
            System.out.println("kon"); //конец проверки
            httpServletResponse.addHeader("Content-Disposition", "attachment; filename=report.pdf");
            ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
            JasperExportManager.exportReportToPdfStream(jasperPrint, servletOutputStream);
            FacesContext.getCurrentInstance().responseComplete();
            } catch (IOException ioe) {
            // TODO: Add catch code
            ioe.printStackTrace();
            System.out.println("problema s IOS ---->>> " + ioe);
        } catch (JRException jre) {
            // TODO: Add catch code
            jre.printStackTrace();
            System.out.println("problema s JRException ---->>> " + jre);
        }
.....


так вот, и тут ( String reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reports/report.jasper"); ) я получаю эксепшен:

Код: plaintext
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: \reports\report.jasper

как бы не может найти файл report.jasper, но там есть этот репорт.
З.Ы. а самое интересное когда я смотрел(открыл) на ear архив там этого файла нету, как так не понимаю... :(
помогите пожалуйста разобраться.
З.Ы. в чем моя ошибка или что я не правильно делаю?
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38895232
Aghial
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Музаффар,

у меня было что-то похожее при использовании maven:
"По умолчанию при сборке из src/main/java забираются только исходники классов, все остальное берется из resources. Могут быть и другие каталоги, но их необходимо явно указать в pom.xml."
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38895329
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aghial,
я пока с maven'ом не работаю... т.е. у меня только web.xml есть.
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38895358
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффаркак бы не может найти файл report.jasper, но там есть этот репорт.
З.Ы. а самое интересное когда я смотрел(открыл) на ear архив там этого файла нету, как так не понимаю... :(
помогите пожалуйста разобраться.
З.Ы. в чем моя ошибка или что я не правильно делаю?

Посмотрите как развернулось ваше приложение на сервере приложений.
Может его действительно нет там где вы думаете он должен лежать.
А так вместо getRealPath попробуйте использовать getResourceAsStream...
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38895388
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulПосмотрите как развернулось ваше приложение на сервере приложений.
Может его действительно нет там где вы думаете он должен лежать.
А так вместо getRealPath попробуйте использовать getResourceAsStream...

как я уже говорил там нет этих файлов...
но... вообщем вот структура:
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38895390
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulПосмотрите как развернулось ваше приложение на сервере приложений.
Может его действительно нет там где вы думаете он должен лежать.
а вот что в сервере приложений: и там нет ни report.jasper, ни report.jrxml
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38895478
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul,

вроде сделал, репорты были на Application Sources а надо было в Web Content -- resources -- reports.
после этого они появились и ear архиве тоже.
З.Ы. теперь другая ошибка появилась:
строка та же где reportPath , а ошибка java.lang.NoClassDefFoundError: javax/faces/contex/FacesContex
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38895500
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Музаффарmad_nazgul,

вроде сделал, репорты были на Application Sources а надо было в Web Content -- resources -- reports.
после этого они появились и ear архиве тоже.
З.Ы. теперь другая ошибка появилась:
строка та же где reportPath , а ошибка java.lang.NoClassDefFoundError: javax/faces/contex/FacesContex А куда деплоится приложение?
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38895523
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGAА куда деплоится приложение?
в качестве App Server'а использую Weblogic Server , случайно не из-за этого такие ошибки?
попробую на другом сервере запускать приложение может прокатит...
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38895881
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарmad_nazgul,

вроде сделал, репорты были на Application Sources а надо было в Web Content -- resources -- reports.
после этого они появились и ear архиве тоже.
З.Ы. теперь другая ошибка появилась:
строка та же где reportPath , а ошибка java.lang.NoClassDefFoundError: javax/faces/contex/FacesContex

Нету соответствующей библиотеки.
Скорее всего ее надо скачать и положить куда дотягивается ClassPath.
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38895929
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulНету соответствующей библиотеки.
Скорее всего ее надо скачать и положить куда дотягивается ClassPath.

интересно и странно, а какая библиотека?
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38896055
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарmad_nazgulНету соответствующей библиотеки.
Скорее всего ее надо скачать и положить куда дотягивается ClassPath.

интересно и странно, а какая библиотека?

Мне гугл говорит этой
javax.faces-api-2.0.jar
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38896171
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulМне гугл говорит этой
javax.faces-api-2.0.jar
ошибка осталась все равно...
а есть ли возможность указать путь к файлу по другому?
пробовал
Код: java
1.
getServletContext.getRealPath("/reports/report.jasper");


возврашает NULL
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38896552
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul,
добавил некоторые библиотеки (jasperreports-6.0.0.jar и javax.faces-api-2.2.jar) к серверу приложений теперь
когда
Код: java
1.
String reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reports/report.jasper");


получаю эксепшен
Код: plaintext
1.
2.
Servlet failed with Exception
java.lang.NullPointerException
	at demo.Report.doGet(Report.java:114)
строка 114 это у меня String reportPath = ...

а когда
Код: java
1.
String reportPath = getServletContext().getRealPath("/reports/report.jasper");


Код: plaintext
1.
2.
3.
4.
5.
6.
Servlet failed with Exception
java.lang.NullPointerException
	at java.io.File.<init>(File.java:222)
	at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:578)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:930)
	at demo.Report.doGet(Report.java:119)
строка 119 это у меня jasperPrint = JasperFillManager.fillReport(reportPath, new HashMap(), beanCollectionDataSource);

З.Ы. во втором случае я получаю NULL ...
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38896743
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарmad_nazgul,

строка 119 это у меня jasperPrint = JasperFillManager.fillReport(reportPath, new HashMap(), beanCollectionDataSource);

З.Ы. во втором случае я получаю NULL ...

Еще раз используете getResourceAsStream(...)
getRealPath()
Идет от корня собранного вашего приложения.
Причем в зависимости от настроек maven структура может отличаться.
Грубо говоря "корень" проекта идет от web или webapp.
А потом туда кладутся скомпилированные классы, ресурсы и прочее.
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38896835
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulЕще раз используете getResourceAsStream(...)
getRealPath()
Идет от корня собранного вашего приложения.
Причем в зависимости от настроек maven структура может отличаться.
Грубо говоря "корень" проекта идет от web или webapp.
А потом туда кладутся скомпилированные классы, ресурсы и прочее.

Спасибо, за Ваши ответы и советы!
пробовал как Вы сказали getResourceAsStream(...) вроде прошло, но теперь получаю другую ошибку...
З.Ы. можете коротко объяснить последовательность, как должно быть все это?
1) и когда я получаю полный путь к файлу скажем через getPath(); я должен указать на файл *.jasper или *.jrxml?
2) аналогично с первым только вместо getPath() getResourceAsStream?
3) скажем я уже получил желаемого (String или InputStream) компилировать надо? ( JasperCompileManager.compileReport(...); )
4) потом на сколько я понял передаю все на JasperFillManager
5) если вышеуказанные правильны то дальше что? если нет то коротко объясните пожалуйста.
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38896907
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МузаффарСпасибо, за Ваши ответы и советы!
пробовал как Вы сказали getResourceAsStream(...) вроде прошло, но теперь получаю другую ошибку...
З.Ы. можете коротко объяснить последовательность, как должно быть все это?
1) и когда я получаю полный путь к файлу скажем через getPath(); я должен указать на файл *.jasper или *.jrxml?
2) аналогично с первым только вместо getPath() getResourceAsStream?
3) скажем я уже получил желаемого (String или InputStream) компилировать надо? ( JasperCompileManager.compileReport(...); )
4) потом на сколько я понял передаю все на JasperFillManager
5) если вышеуказанные правильны то дальше что? если нет то коротко объясните пожалуйста.

1) В зависимости от того, что у вас есть.
*.jrxml - это исходник отчета
*.jasper - это уже скомпилированные отчет
Обычно используют уже скомпилированный отчет, чтобы не тратить время на компиляцию.
2) Настоятельно рекомендую почитать про ресурсы Java и посмотреть примеры
3) См. пункт1
4) Не помню. По идее можно нагуглить примеры.
5) А дальше нужно выгрузить отчет в нужном вам формате. :-)
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38896957
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, за Ваши ответы и советы!
пробовал как Вы сказали getResourceAsStream(...) вроде прошло, но теперь получаю другую ошибку...

Какая ошибка и какой теперь исправленный код мы должны сами догадаться?

З.Ы. можете коротко объяснить последовательность, как должно быть все это?
1) и когда я получаю полный путь к файлу скажем через getPath(); я должен указать на файл *.jasper или *.jrxml?

Я вот вообще не понимаю зачем getPath()
Хочешь компилить jrxml-файл на лету, берешь jrxml, потом JasperCompileManager.compileReport(...) получаешь исполняемый report.jasper (который у тебя уже есть, тогда вопрос зачем он тебе) и кидешь его в fillReport

Смотрим исходники JasperFillManager. Вариантов там масса. Выбирай тот который тебе нужен. Один из вариантов
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
	/**
	 * @see #fill(InputStream, Map, JRDataSource)
	 */
	public static JasperPrint fillReport(
		InputStream inputStream, 
		Map<String,Object> parameters,
		JRDataSource dataSource
		) throws JRException
	{
		return getDefaultInstance().fill(inputStream, parameters, dataSource);
	}
        ....
	/**
	 * Fills the compiled report design loaded from the supplied input stream and returns
	 * the generated report object.
	 * 
	 * @param inputStream  input stream to read the compiled report design object from
	 * @param parameters   report parameters map
	 * @param dataSource   data source object
	 * @return generated report object
	 */
	public JasperPrint fill(
		InputStream inputStream, 
		Map<String,Object> parameters,
		JRDataSource dataSource
		) throws JRException
	{
		JasperReport jasperReport = (JasperReport)JRLoader.loadObject(inputStream);

		return fill(jasperReport, parameters, dataSource);
	}



2) аналогично с первым только вместо getPath() getResourceAsStream?

Ну где то так getResourceAsStream(путькакойтамправильный/report.jasper)

3) скажем я уже получил желаемого (String или InputStream) компилировать надо? ( JasperCompileManager.compileReport(...); )

Глядя что ты получил. jrxml надо, jasper нет. Хотя каша тут в вопросе. Что такое "jrxml как String" ???

4) потом на сколько я понял передаю все на JasperFillManager

да. В результате jasper выполняет отчет и возвращает jasperPrint object

5) если вышеуказанные правильны то дальше что? если нет то коротко объясните пожалуйста.

экспортируешь JasperPrint в нужный тебе формат (xls, pdf, html, ...)
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38897243
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul, sanBez,
sanBezКакая ошибка и какой теперь исправленный код мы должны сами догадаться?

при использовании getResourceAsStream а точнее
Код: java
1.
InputStream reportPath = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/recources/reports/report.jasper");


я получаю эксепшен, типа
Код: plaintext
java.lang.NullPointerException
со ссылкой именно на ту строку...

а если я использую
Код: java
1.
InputStream reportPath = getServletContext().getResourceAsStream("/recources/reports/report.jasper");


то все проходит успешно до строки:
Код: java
1.
2.
HttpServletResponse httpServletResponse =
                (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();


с ошибкой
Код: plaintext
java.lang.NullPointerException

З.Ы. я что то недопонемаю или не учитываю...
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38897258
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InputStream reportPath = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/recources/reports/report.jasper");

Ничего не попутал?
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38897308
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanBezInputStream reportPath = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/recources/reports/report.jasper");

Ничего не попутал?
а поконкретнее можно? если имеете виду recources то да опечатка, и вообще можно просто /reports/report.jasper , а ситуация не измениться...
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38897768
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вносил изменения в код,
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
try{
            JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(list);
            System.out.println("nach");
            InputStream reportPath = getServletConfig().getServletContext().getResourceAsStream("/resources/reports/report.jasper");

            System.out.println("---------------------- " + reportPath); 

            jasperPrint = JasperFillManager.fillReport(reportPath, new HashMap(), beanCollectionDataSource);

            System.out.println("++++++++++++++++ " + jasperPrint); 

//            HttpServletResponse httpServletResponse = 
//                (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();

            System.out.println("===================>>>>"+response);
            System.out.println("kon");

            response.setHeader("Cache-Control", "no-cache");
            response.setContentType("application/pdf");
//            response.addHeader("Content-Disposition", "attachment; filename=report.pdf");
            response.addHeader("Content-Disposition", "inline; filename=report.pdf");
            OutputStream servletOutputStream = response.getOutputStream();
            JasperExportManager.exportReportToPdfStream(jasperPrint, servletOutputStream);
            servletOutputStream.flush();
            servletOutputStream.close();
}catch(...){...}


пока не работает, получаю исключение, типа
Код: plaintext
java.lang.IllegalStateException: strict servlet API: cannot call getOutputStream() after getWriter()
и ссылку на OutputStream servletOutputStream = response.getOutputStream();

я понял типа нельзя одновременно использовать getOutputStream() и getWriter() , надо либо первую либо вторую, но у меня в коде вообще нету getWriter() ...

З.Ы. что я опять сделал не так?
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38897915
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все таки нашел свою ошибку не комментированным осталась строка getWriter() , это в начале сервлета...
З.Ы. теперь получаю PDF документ но без информации, т.е. белый лист документа PDF...
при этом там есть и статические записи типа Hello world! (для проверки)...
что делать?
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38898049
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никакие идеи или мнении?
...
Рейтинг: 0 / 0
jasperreports + JEE (EJB/JPA)
    #38898561
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблему решил, вроде работает кроме одного не появляется статические данные
вот сам jrxml файл:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
              name="report1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20"
              rightMargin="20" topMargin="20" bottomMargin="20" uuid="4cedddd1-22f5-45bc-acb5-c48907b83dd1">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <field name="idabiturient" class="java.math.BigDecimal"/>
    <field name="lastName" class="java.lang.String"/>
    <title>
        <band height="33">
            <staticText>
                <reportElement x="226" y="0" width="100" height="20"/>
                <text>
                    <![CDATA[My first report!!!]]>
                </text>
            </staticText>
        </band>
    </title>
    <detail>
        <band height="100">
            <textField>
                <reportElement x="0" y="30" width="50" height="20"/>
                <textFieldExpression class="java.math.BigDecimal">
                    <![CDATA[$F{idabiturient}]]>
                </textFieldExpression>
            </textField>
            <textField>
                <reportElement x="0" y="60" width="150" height="20"/>
                <textFieldExpression class="java.lang.String">
                    <![CDATA[$F{lastName}]]>
                </textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>



почему так честно говоря не понимаю. Помогите решит проблему...
...
Рейтинг: 0 / 0
25 сообщений из 73, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / jasperreports + JEE (EJB/JPA)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]