Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / jasperreports + JEE (EJB/JPA) / 25 сообщений из 73, страница 1 из 3
04.03.2015, 19:03
    #38895040
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperreports + JEE (EJB/JPA)
Здравствуйте форумчане!
помогите разобраться с 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
04.03.2015, 22:57
    #38895232
Aghial
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperreports + JEE (EJB/JPA)
Музаффар,

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

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

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

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

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

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

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

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

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

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


возврашает NULL
...
Рейтинг: 0 / 0
05.03.2015, 20:23
    #38896552
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperreports + JEE (EJB/JPA)
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
06.03.2015, 06:18
    #38896743
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperreports + JEE (EJB/JPA)
Музаффарmad_nazgul,

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

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

Еще раз используете getResourceAsStream(...)
getRealPath()
Идет от корня собранного вашего приложения.
Причем в зависимости от настроек maven структура может отличаться.
Грубо говоря "корень" проекта идет от web или webapp.
А потом туда кладутся скомпилированные классы, ресурсы и прочее.
...
Рейтинг: 0 / 0
06.03.2015, 09:28
    #38896835
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperreports + JEE (EJB/JPA)
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
06.03.2015, 10:35
    #38896907
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperreports + JEE (EJB/JPA)
МузаффарСпасибо, за Ваши ответы и советы!
пробовал как Вы сказали 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
06.03.2015, 11:14
    #38896957
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperreports + JEE (EJB/JPA)
Спасибо, за Ваши ответы и советы!
пробовал как Вы сказали 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
06.03.2015, 14:27
    #38897243
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperreports + JEE (EJB/JPA)
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
06.03.2015, 14:38
    #38897258
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperreports + JEE (EJB/JPA)
InputStream reportPath = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/recources/reports/report.jasper");

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

Ничего не попутал?
а поконкретнее можно? если имеете виду recources то да опечатка, и вообще можно просто /reports/report.jasper , а ситуация не измениться...
...
Рейтинг: 0 / 0
07.03.2015, 05:31
    #38897768
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperreports + JEE (EJB/JPA)
вносил изменения в код,
Код: 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
07.03.2015, 15:38
    #38897915
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperreports + JEE (EJB/JPA)
все таки нашел свою ошибку не комментированным осталась строка getWriter() , это в начале сервлета...
З.Ы. теперь получаю PDF документ но без информации, т.е. белый лист документа PDF...
при этом там есть и статические записи типа Hello world! (для проверки)...
что делать?
...
Рейтинг: 0 / 0
07.03.2015, 20:59
    #38898049
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperreports + JEE (EJB/JPA)
никакие идеи или мнении?
...
Рейтинг: 0 / 0
08.03.2015, 21:39
    #38898561
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperreports + JEE (EJB/JPA)
проблему решил, вроде работает кроме одного не появляется статические данные
вот сам 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
Форумы / Java [игнор отключен] [закрыт для гостей] / jasperreports + JEE (EJB/JPA) / 25 сообщений из 73, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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