次のいずれかが起こっていると強く疑われます。
- セキュリティ違反
- 満たされていないリンク エラー
- Word がサーバーにインストールされていません
- その他のクラスローダ エラー ( edit )
シンプルな jsp で試し、try-catch ブロック内で LibraryLoader を直接呼び出しました。
try {
LibraryLoader.loadJacobLibrary();
ActiveXComponent oWord = new ActiveXComponent("Word.Application");
oWord.setProperty("Visible", new Variant(true));
} catch (Throwable th) {
th.printStackTrace(new java.io.PrintWriter(out));
}
静的デバッグ初期化子からのセキュリティ違反が原因で、JacobObject クラスの初期化に失敗しました: "true".equalsIgnoreCase(System.getProperty("com.jacob.debug"));
。それを true への単純な割り当てに置き換え、それを jacob.jar に置き換えると、次のようになりました。java.lang.UnsatisfiedLinkError: no jacob-1.16-x64 in java.library.path
この時点で、物事は毛むくじゃらになります。おそらく、メソッドを置き換えた LibraryLoader コードを次のloadJacobLibrary
ようなものに置き換える必要があります。
public static void loadJacobLibrary() {
System.load("C:/<path to .dll as known on the server>/" + getPreferredDLLName() + ".dll");
}
次に、Word.Application
.
編集他のクラスローダー エラーの場合、根本的な問題は、サーバー内で.dll の 1 つのインスタンスしかロードできないことです。 dll を 1 回だけロードし、コードがすべてのサーブレットで確実に利用できるようにするために、Web アプリケーションのリロードによって妨げられないクラスローダーにコードをロードする必要があります。その場合、サーバー アプリケーションがリロードされるまで、.dll を使用できなくなります。