Apache Fop

garrick

Well-Known Member
Lotus team
26.10.2009
879
78
#1
Наверное ругаться на меня будете, но всё равно спрошу. Как запустить FOP в Lotus Notes? Что бы формирование PDF производилось на рабочем месте клиента. Создал библиотеку со всеми необходимыми файлами (fop.jar и все jar-файлы из папки lib от fop). Беру пример How to Embed Apache FOP in a Java application, совместил всё это, запускаю

Вываливается exeption

Код:
java.lang.UnsupportedOperationException: Don't know how to handle "application/pdf" as an output format. Neither an FOEventHandler, nor a Renderer could be found for this output format.
at org.apache.fop.render.RendererFactory.createFOEventHandler(RendererFactory.java:360)
at org.apache.fop.fo.FOTreeBuilder.<init>(FOTreeBuilder.java:105)
at org.apache.fop.apps.Fop.createDefaultHandler(Fop.java:100)
at org.apache.fop.apps.Fop.<init>(Fop.java:78)
at org.apache.fop.apps.FopFactory.newFop(FopFactory.java:297)
at org.apache.fop.apps.FopFactory.newFop(FopFactory.java:274)
at JavaAgent.NotesMain(JavaAgent.java:39)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
Гугль выдал пару каких-то невразумительных ссылок по этому поводу, ни одна из них не содержит решения проблемы. Коллеги, ведь кто-то же из вас делал это?

Добавлено: Был бы ещё более признателен, если кто-то научил меня использовать в клиенте Lotus Notes результаты работы этого чуда Oracle BI Publisher Desktop без правки у всех пользователей java.policy. Тоже ругается
Код:
java.security.AccessControlException: Access denied (java.util.logging.LoggingPermission control)
at java.security.AccessController.checkPermission(AccessController.java:132)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:544)
at COM.ibm.JEmpower.applet.AppletSecurity.superDotCheckPermission(AppletSecurity.java:1449)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1617)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1464)
at java.util.logging.LogManager.checkPermission(LogManager.java:297)
at java.util.logging.Handler.checkPermission(Handler.java:406)
at java.util.logging.Handler.setLevel(Handler.java:400)
at java.util.logging.Logger.initHandler(Logger.java:468)
at java.util.logging.Logger.getHandlers(Logger.java:484)
at java.util.logging.Logger.log(Logger.java:1127)
at java.util.logging.Logger.logp(Logger.java:1165)
at oracle.xdo.common.log.JDKLogImpl.write(JDKLogImpl.java:127)
at oracle.xdo.common.log.Logger.log(Logger.java:304)
at oracle.xdo.template.FOProcessor.logMemoryStatus(FOProcessor.java:2303)
at oracle.xdo.template.FOProcessor.generate(FOProcessor.java:1267)
at JavaAgent.NotesMain(JavaAgent.java:39)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
Лицензионная политика и отсутствие исходников (в первую очередь :)) не позволяет вырубить Logger в этой штуке.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 490
367
#2
ФОП юзает свои либы, ЕМНИП - там есть синглтоны и фактори всякие, кот. в условиях нотусёвой жвм (её класслоадера) будет сложно заюзать (пихая их в БД)
а потому, как пр-ло, кладутся они в jvm/lib/ext (на каждом локальном клиенте)...
в БД OpenXLS есть код, кот. выгружает либы из нотусевого дока на локал (там тупо получаем java home)
в навигаторе "Настройки" Action->Jar Libraries 2 lib/ext (на соответ. доке)
у мя в доках POI и OpenXLS

Добавлено: второй вопрос - это премишены, читать http://codeby.net/forum/threads/46120.html?hl...ontrolException
 

garrick

Well-Known Member
Lotus team
26.10.2009
879
78
#3
Эх, блин! Некошерно как-то получается. И конфиг со шрифтами выкладывать надо?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 490
367
#4
И конфиг со шрифтами выкладывать надо?
нет - не надо, сморим пример
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться

там бд и все пироги, здесь (на форуме) лежать отрывки из этой БД

Добавлено: см. агент FOPbased
берет шрифты из системы, конфиг прописан в стринге, XSL берет из дока

Добавлено:
Некошерно как-то получается
хотите кошерности - пишите свой класслоадер, прописывайте пермишены на каждой клиентской машине :(...
но мне почему-то кажется - вас такой путь не устроит
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 490
367
#6
ну значит ещё - пишите свой плагин к эклипсу (если грим о 8.5.х) и делайте деплоймент, по подобию Extension Library (http://extlib.openntf.org/)
это самый "кошерный способ" :(
 

garrick

Well-Known Member
Lotus team
26.10.2009
879
78
#7
ФОП юзает свои либы, ЕМНИП - там есть синглтоны и фактори всякие, кот. в условиях нотусёвой жвм (её класслоадера) будет сложно заюзать (пихая их в БД)
а потому, как пр-ло, кладутся они в jvm/lib/ext (на каждом локальном клиенте)...
Выложил все библиотеки в jvm/lib/ext, теперь опять проблема с Logger'ом
Код:
java.security.AccessControlException: Access denied (java.util.logging.LoggingPermission control)...
Версия FOP -1.0 и 1.1, посмотрел 0.95 - там тоже присутствует Apache Commons-Logging. У вас это работает? С какой версией FOP?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 490
367
#8
у меня, 7.х всё работает
на 8-ке 9-ке - надо смореть, про логер - подозреваю что пересекается со штатным
лечение конкретной ошибке я указал выше, но надо посмотреть по присут. штатного логгера (и м.б. - выбросить тот кот. есть в поставке с ФОП)
 

garrick

Well-Known Member
Lotus team
26.10.2009
879
78
#9
у меня, 7.х всё работает
на 8-ке 9-ке - надо смореть, про логер - подозреваю что пересекается со штатным
лечение конкретной ошибке я указал выше, но надо посмотреть по присут. штатного логгера (и м.б. - выбросить тот кот. есть в поставке с ФОП)
Без него не взлетает, говорит "Не могу найти класс...". Подкладываю commons-logging вываливается Access denied. Штатный логгер есть в Java 1.6, но common-logging и должен его использовать, если другого не найдёт. Может ему попробовать какой-нибудь Log4J подсунуть?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 490
367
#10
только что попробовал на 9.0 - все jar из lib (архив fop 0.95) сложил в lib/ext
никаких ошибок...
а вот ежели нек. jar не положить (проверять не стал - какие) - то можно получить вышеописанную
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 490
367
#11
выяснил, ошибка возникает при отсутствии batik-all-1.7.jar
файл xercesImpl-2.7.1.jar "не нужен" т.к. у мя используется дефолтный
Java:
// Resulting SAX events (the generated FO) must be piped through to FOP
Result res = new SAXResult(fop.getDefaultHandler());
а он в системе есть
КМК я игрался с разными (плохо помню) но сильного различия не увидел
по поводу логинга ваще (апаче ФОП) - используется commons-logging-1.0.4.jar , а вот бэкэнд мона настроить http://xmlgraphics.apache.org/fop/0.95/embedding.html
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 490
367
#13
видать еще чёто наставили (из доп. либ)
поставьте чистый нотус (да хоть в виртуалку) и смотрите список штатных либ
я проверял и на 9.0 и на 7.04 - все работает (я про свой код и БД)
 

garrick

Well-Known Member
Lotus team
26.10.2009
879
78
#14
видать еще чёто наставили (из доп. либ)
Из доп.либ. стоит только Oracle JDBC - всё остальное в jvm/lib/ext исключительно родное от Lotus Notes.
Может у меня с самим кодом что-то не в порядке? Есть какой-нибудь пример (именно в Lotus Notes) посмотреть?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 490
367
#15

garrick

Well-Known Member
Lotus team
26.10.2009
879
78
#16
яж дал ссылку на проект - там и БД с кодом, агент называется FOPbased

Добавлено: ТОС есть, в нем
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться


Добавлено:
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
Код:
Exported 122585 bytes 
<?xml version='1.0'?>
<DXLExporterLog>
</DXLExporterLog>
FOP ExampleXML2PDF

Preparing...
Output: PDF (c:\examples\embedding\out\ResultXML2PDF.pdf)

Transforming...
java.security.AccessControlException: Access denied (java.util.logging.LoggingPermission control)
at java.security.AccessController.checkPermission(AccessController.java:132)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:544)
at COM.ibm.JEmpower.applet.AppletSecurity.superDotCheckPermission(AppletSecurity.java:1449)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1617)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1464)
at java.util.logging.LogManager.checkPermission(LogManager.java:297)
at java.util.logging.Handler.checkPermission(Handler.java:406)
at java.util.logging.Handler.setLevel(Handler.java:400)
at java.util.logging.Logger.initHandler(Logger.java:468)
at java.util.logging.Logger.getHandlers(Logger.java:484)
at java.util.logging.Logger.log(Logger.java:1127)
at java.util.logging.Logger.logp(Logger.java:1165)
at org.apache.commons.logging.impl.Jdk14Logger.log(Jdk14Logger.java:91)
at org.apache.commons.logging.impl.Jdk14Logger.warn(Jdk14Logger.java:242)
at org.apache.fop.fonts.FontCache.loadFrom(FontCache.java:146)
at org.apache.fop.fonts.FontCache.load(FontCache.java:117)
at org.apache.fop.apps.FopFactory.setUseCache(FopFactory.java:692)
at org.apache.fop.apps.FopFactory.<init>(FopFactory.java:158)
at org.apache.fop.apps.FopFactory.newInstance(FopFactory.java:166)
at ExampleXML2PDF.NotesMain(ExampleXML2PDF.java:99)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
Ну, пойду попробую Lotus Notes переставлю. B)
 

garrick

Well-Known Member
Lotus team
26.10.2009
879
78
#18
Поставил 8.5.2, скопировал все библиотеки куда надо - работает. И с FOP 0.95 и с 1.1. Правда на вашем примере поругалось что-то, видать ему шаблон чем-то не понравился, но пример embedded XML2PDF от FOP запускается. Теперь надо с русскими шрифтами разобраться.

Ещё неплохо бы понять "что это было?", наверняка на каком-нибудь клиенте это всплывёт снова. Надо бы уметь починить не только полной переустановкой. У меня стоял Designer 8.5.3 c Upgrade Pack 1. Может из-за этого Upgrade Pack всё дело?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 490
367
#19
теоретически надо проводить трэйс - куда либы обращаются, на чистой установке и на той кот. глючит
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 490
367
#20
Теперь надо с русскими шрифтами разобраться.
в моем агенте шрифты настраиваются в джава стринге, ничего не мешает сделать настроечный документ