Как я могу позвонить в Java из ASP? - PullRequest
2 голосов
/ 09 января 2009

Я не знаком с ASP, но помогаю кому-то с их сайтом в качестве побочного проекта. Я пытаюсь вызвать Apache FOP (Java-приложение) из ASP, используя VB. Я видел простые примеры, использующие конструкцию GetObject ('java: ...'), но я не знаю, как передавать и извлекать двоичные данные из объекта Java.

В идеале, я бы сделал все это в памяти - я бы предпочел не записывать мои данные на диск, вызывать FOP для этого файла (который будет читать, а затем записывать новый файл), а затем перечитывать данные с диска. Сайт не , который занят, поэтому я мог бы сделать это, но он просто не выглядит эффективным.

Ответы [ 3 ]

1 голос
/ 09 января 2009

Я бы не стал беспокоиться об эффективности, пока не обнаружил проблему, и измерения не показали, что виновным было решение FOP.

Я бы предложил асинхронный вызов для веб-службы. Отправил сообщение, содержащее входной поток XML и таблицу стилей XSL-T. Попросите службу записать PDF на свой локальный диск. Добавьте почтовый ящик в свой интерфейс, чтобы предупредить пользователей, когда PDF будет готов к загрузке. Нажмите на ссылку, и PDF-файл будет передан в браузер. Пользователь может просматривать или сохранять на свой локальный диск по своему усмотрению.

В этом случае Asynch хорош, потому что вы не знаете, сколько времени может занять преобразование. Зачем заставлять пользователя ждать? Позвольте им проверить позже. Вызов AJAX для проверки нового PDF будет элегантным.

0 голосов
/ 13 января 2010

как добавить файл конфигурации -c conf \ fop.xconf или -c C: \ fop \ conf \ fop.xconf на вышеупомянутую отличную работу

та!

0 голосов
/ 22 января 2009

Я нашел обходной путь. Это для IIS, работающего на сервере Win 2k3 - более старые версии будут намного проще.

Сначала я создал подкаталог на главном сайте (в целях безопасности) и подключил к этому каталогу новый пул приложений. Новый пул приложений должен работать как локальная система. Я не смог заставить работать fop.bat, даже работая как локальная система, но я мог вызвать java, поэтому я поместил всю командную строку fop в свой скрипт asp, аналогично следующему фрагменту:

Dim shell, foppath, workpath
Set shell = Server.CreateObject("WScript.Shell")

foppath = Server.MapPath("/fop/")
workpath = Server.MapPath("/tmp/")
shell.CurrentDirectory = foppath

Dim commandline
commandline = "java -Denv.windir=C:\WINDOWS   -cp """
'set classpath
commandline = commandline & foppath & "\build\fop.jar;"
commandline = commandline & foppath & "\build\fop-sandbox.jar;"
commandline = commandline & foppath & "\build\fop-hyph.jar;"
commandline = commandline & foppath & "\lib\xml-apis-1.3.04.jar;"
commandline = commandline & foppath & "\lib\xml-apis-ext-1.3.04.jar;"
commandline = commandline & foppath & "\lib\xercesImpl-2.7.1.jar;"
commandline = commandline & foppath & "\lib\xalan-2.7.0.jar;"
commandline = commandline & foppath & "\lib\serializer-2.7.0.jar;"
commandline = commandline & foppath & "\lib\batik-all-1.7.jar;"
commandline = commandline & foppath & "\lib\xmlgraphics-commons-1.3.1.jar;"
commandline = commandline & foppath & "\lib\avalon-framework-4.2.0.jar;"
commandline = commandline & foppath & "\lib\commons-io-1.3.1.jar;"
commandline = commandline & foppath & "\lib\commons-logging-1.0.4.jar;"
commandline = commandline & foppath & "\lib\jai_imageio.jar;"
commandline = commandline & foppath & "\lib\fop-hyph.jar;"
commandline = commandline & """ org.apache.fop.cli.Main "
commandline = commandline & workpath & "/file.fo "
commandline = commandline & workpath & "/file.pdf "

Dim ResultCode
ResultCode = Shell.Run(commandline,,True) ' True = Wait for FOP to finish

После этого я проверяю свои временные файлы и т. Д. Возможно, это не самое элегантное решение, но, учитывая необходимость, я уверен, что оно будет работать долго.

...