Летающая тарелка в Lotus Notes - PullRequest
4 голосов
/ 09 мая 2011

Я пытался конвертировать простые XHTML-файлы в PDF и использовал для этого Flying Saucer и iText. В Java это работало без проблем, однако, когда я попытался создать агент Lotus Notes с тем же кодом, у меня возникло исключение, с которым я не уверен, что делать.

код:

import lotus.domino.*;
import java.io.*;
import com.lowagie.text.DocumentException;
import org.xhtmlrenderer.pdf.ITextRenderer; 
import org.xhtmlrenderer.util.XRLog;
import java.util.*;

public class JavaAgent extends AgentBase {

    public void NotesMain() {

      try {
        Session session = getSession();
        AgentContext agentContext = session.getAgentContext();
        String received = agentContext.getDocumentContext().
             getItemValueString("Query_String");
        String[] split;
        split = received.split("&");
        String url = split[1];
        split = url.split("/");
        String outputFile = split[split.length-1];
        String direc = session.getEnvironmentString("Directory", true);
        outputFile = direc + "\\" + outputFile + ".pdf"; 
        OutputStream os = new FileOutputStream(outputFile);
        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocument(url);
        renderer.layout();
        renderer.createPDF(os);
        os.close();
        System.exit(0);

      } catch(Exception e) {
        e.printStackTrace();
      }
   }
}

Это дает следующее:

09-05-2011 13:33:29 HTTP JVM: Не удалось инициализировать конфигурацию для библиотеки Flying Saucer. Сообщение: не удается найти ресурс для пакета java.util.PropertyResourceBundle, ключ access_properties_not_allowed

09-05-2011 13:33:29 HTTP JVM: java.util.MissingResourceException: не удается найти ресурс для пакета java.util.PropertyResourceBundle, ключ access_properties_not_allowed

09-05-2011 13:33:29 HTTP JVM: at java.util.MissingResourceException. (MissingResourceException.java:50)

09-05-2011 13:33:29 HTTP JVM: в java.util.ResourceBundle.getObject (ResourceBundle.java:400)

09-05-2011 13:33:29 HTTP JVM: в java.util.ResourceBundle.getString (ResourceBundle.java:421)

09-05-2011 13:33:29 HTTP JVM: at lotus.notes.JavaString.getString (неизвестный источник)

09-05-2011 13:33:29 HTTP JVM: at lotus.notes.AgentSecurityManager.checkPropertiesAccess (неизвестный источник)

09-05-2011 13:33:30 JVM HTTP: at java.lang.System.getProperties (System.java:323)

09-05-2011 13:33:30 JVM HTTP: at org.xhtmlrenderer.util.Configuration.loadSystemProperties (Configuration.java:419)

09-05-2011 13:33:30 HTTP JVM: в org.xhtmlrenderer.util.Configuration. (Configuration.java:147)

09-05-2011 13:33:30 JVM HTTP: at org.xhtmlrenderer.util.Configuration.instance (Configuration.java:742)

09-05-2011 13:33:31 HTTP JVM: at org.xhtmlrenderer.util.Configuration.valueFor (Configuration.java:463)

09-05-2011 13:33:31 HTTP JVM: at org.xhtmlrenderer.util.Configuration.isTrue (Configuration.java:709)

09-05-2011 13:33:31 HTTP JVM: at org.xhtmlrenderer.util.XRLog.init (XRLog.java:250)

09-05-2011 13:33:31 HTTP JVM: at org.xhtmlrenderer.util.XRLog.log (XRLog.java:203)

09-05-2011 13:33:31 HTTP JVM: at org.xhtmlrenderer.util.XRLog.render (XRLog.java:194)

09-05-2011 13:33:31 HTTP JVM: at org.xhtmlrenderer.util.XRLog.render (XRLog.java:190)

09-05-2011 13:33:31 HTTP JVM: at org.xhtmlrenderer.layout.SharedContext. (SharedContext.java:107)

09-05-2011 13:33:31 HTTP JVM: at org.xhtmlrenderer.pdf.ITextRenderer. (ITextRenderer.java:111)

09-05-2011 13:33:31 HTTP JVM: at org.xhtmlrenderer.pdf.ITextRenderer. (ITextRenderer.java:102)

09-05-2011 13:33:31 HTTP JVM: в JavaAgent.NotesMain (неизвестный источник)

09-05-2011 13:33:31 HTTP JVM: at lotus.domino.AgentBase.runNotes (неизвестный источник)

09-05-2011 13:33:31 HTTP JVM: at lotus.domino.NotesThread.run (неизвестный источник)

Оскорбительная строка

ITextRenderer renderer = new ITextRenderer();

Поиск в Google "access_properties_not_allowed" буквально ничего не дает.

Ответы [ 2 ]

5 голосов
/ 10 мая 2011

1) Агенты в Notes / Domino имеют дополнительную функцию безопасности в свойствах Агента, которая устанавливает уровень безопасности агента.По умолчанию этот параметр настроен так, чтобы не разрешать ограниченные операции (по умолчанию задано «Не разрешать ограниченные операции»).

Чтобы агент мог запустить свойство, ему необходимо задать одно из следующихпараметры:

«Разрешить ограниченные операции» «Разрешить ограниченные операции с полными правами администратора»

Свойство находится на второй вкладке, ключевой вкладке диалогового окна «Свойства агента».

2) Как уже объяснялось в «дороге в Ямбург», Менеджер безопасности JVM не разрешает доступ к свойствам системы, поскольку в политике безопасности не указано, разрешать это действие.Вы должны изменить политику безопасности виртуальной машины Java (JVM), чтобы разрешить доступ к системным свойствам.Для этого вы можете добавить строку «Права доступа java.security.AllPermission;»в файл "/jvm/lib/security/java.policy" в каталоге Notes / Domino.

Файл java.policy будет выглядеть примерно так после внесения изменения:

grant { 
    permission java.security.AllPermission;
    permission java.util.PropertyPermission "java.version", "read";
    permission java.util.PropertyPermission "java.vendor", "read";
    permission java.util.PropertyPermission "java.vendor.url", "read";
    permission java.util.PropertyPermission "java.class.version", "read";
    permission java.util.PropertyPermission "os.name", "read";
        // ... and so on ...
}

После перезапуска клиент / сервер любой Java-программе, для которой требуется доступ к System.getProperties (), теперь будет предоставлен доступ.

1 голос
/ 09 мая 2011

Вероятно, это конфигурация безопасности:

XhtmlRenderer пытается прочитать свою конфигурацию из свойств системы:

09-05-2011 13:33:30 HTTP JVM: at java.lang.System.getProperties(System.java:323)
09-05-2011 13:33:30 HTTP JVM: at org.xhtmlrenderer.util.Configuration.loadSystemProperties(Configuration.java:419)

Но это не разрешено (SecurityManager),

09-05-2011 13:33:29 HTTP JVM: at lotus.notes.AgentSecurityManager.checkPropertiesAccess(Unknown Source)

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

09-05-2011 13:33:29 HTTP JVM: Could not initialize configuration for Flying Saucer library. Message is: Can't find resource for bundle java.util.PropertyResourceBundle, key access_properties_not_allowed

Решение:

  • Попробуйте найти свойства безопасности для Lotus Domino JVM (не знаю, где они могут или должны быть), и дайте коду прочитать свойства системы

Или

  • Сделайте патч для пакета org.xhtmlrenderer, чтобы перехватывать исключения безопасности и обрабатывать их самостоятельно.
...