4

単純な 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: java.util.MissingResourceException で。(MissingResourceException.java:50)

2011 年 9 月 5 日 13:33:29 HTTP JVM: java.util.ResourceBundle.getObject (ResourceBundle.java:400) で

2011 年 9 月 5 日 13:33:29 HTTP JVM: java.util.ResourceBundle.getString (ResourceBundle.java:421) で

2011 年 9 月 5 日 13:33:29 HTTP JVM: lotus.notes.JavaString.getString で (不明なソース)

09-05-2011 13:33:29 HTTP JVM: lotus.notes.AgentSecurityManager.checkPropertiesAccess (不明なソース)

2011 年 9 月 5 日 13:33:30 HTTP JVM: java.lang.System.getProperties (System.java:323) で

2011 年 9 月 5 日 13:33:30 HTTP JVM: org.xhtmlrenderer.util.Configuration.loadSystemProperties (Configuration.java:419) で

2011 年 9 月 5 日 13:33:30 HTTP JVM: org.xhtmlrenderer.util.Configuration で (Configuration.java:147)

2011 年 9 月 5 日 13:33:30 HTTP JVM: org.xhtmlrenderer.util.Configuration.instance (Configuration.java:742) で

2011 年 9 月 5 日 13:33:31 HTTP JVM: org.xhtmlrenderer.util.Configuration.valueFor (Configuration.java:463) で

2011 年 9 月 5 日 13:33:31 HTTP JVM: org.xhtmlrenderer.util.Configuration.isTrue (Configuration.java:709) で

2011 年 9 月 5 日 13:33:31 HTTP JVM: org.xhtmlrenderer.util.XRLog.init (XRLog.java:250) で

2011 年 9 月 5 日 13:33:31 HTTP JVM: org.xhtmlrenderer.util.XRLog.log (XRLog.java:203) で

2011 年 9 月 5 日 13:33:31 HTTP JVM: org.xhtmlrenderer.util.XRLog.render (XRLog.java:194) で

2011 年 9 月 5 日 13:33:31 HTTP JVM: org.xhtmlrenderer.util.XRLog.render (XRLog.java:190) で

2011 年 9 月 5 日 13:33:31 HTTP JVM: org.xhtmlrenderer.layout.SharedContext.(SharedContext.java:107) で

2011 年 9 月 5 日 13:33:31 HTTP JVM: org.xhtmlrenderer.pdf.ITextRenderer で。(ITextRenderer.java:111)

2011 年 9 月 5 日 13:33:31 HTTP JVM: org.xhtmlrenderer.pdf.ITextRenderer で。(ITextRenderer.java:102)

09-05-2011 13:33:31 HTTP JVM: JavaAgent.NotesMain で (不明なソース)

2011 年 9 月 5 日 13:33:31 HTTP JVM: lotus.domino.AgentBase.runNotes (不明なソース)

2011 年 9 月 5 日 13:33:31 HTTP JVM: lotus.domino.NotesThread.run (不明なソース)

違反ラインは

ITextRenderer renderer = new ITextRenderer();

「access_properties_not_allowed」をグーグルで検索しても、文字通り何も得られません。

4

2 に答える 2

5

1)Notes / Dominoのエージェントには、エージェントのセキュリティレベルを設定する追加のセキュリティ機能がエージェントプロパティにあります。デフォルトでは、この設定は制限された操作を許可しないように設定されています(デフォルト設定は「制限された操作を許可しない」です)。

エージェントがプロパティを実行するには、次のいずれかのオプションに設定する必要があります。

「制限された操作を許可する」「完全な管理者権限で制限された操作を許可する」

このプロパティは、[エージェントのプロパティ]ダイアログボックスの2番目のタブである[キー]タブにあります。

2)「ヤムブルグへの道」ですでに説明したように、セキュリティポリシーでこのアクションを許可するように指定されていないため、JVMのセキュリティマネージャはシステムのプロパティへのアクセスを許可していません。システムプロパティへのアクセスを許可するには、Java仮想マシン(JVM)のセキュリティポリシーを変更する必要があります。これを行うには、「permissionjava.security.AllPermission;」という行を追加します。Notes/Dominoディレクトリの「/jvm/lib/security/java.policy」ファイルに移動します。

変更を加えると、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 ...
}

クライアント/サーバーが再起動されると、System.getProperties()へのアクセスを必要とするすべてのJavaプログラムにアクセスが許可されます。

于 2011-05-10T06:53:59.163 に答える
1

これはおそらくセキュリティ構成です:

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パッケージにパッチを適用して、セキュリティ例外をキャッチし、それらを独自に処理します。
于 2011-05-09T14:53:26.523 に答える