[aspose-words]Range.replaceで、java.util.EmptyStackExceptionが発生する。

ivyで、aspose-words、21.12を使っています。


Word文書の置換を行っており、
Range.replaceで、java.util.EmptyStackExceptionが発生します。

スタックトレースの抜粋は以下です。
Caused by: jp.co.dnp.cio.ngsp.pmxn.lib.document.DocumentProcessorException: java.util.EmptyStackException
at jp.co.dnp.cio.ngsp.pmxn.lib.document.aspose.ReplaceWordAspose.replace(ReplaceWordAspose.java:142)
at jp.co.dnp.cio.ngsp.pmxn.lib.document.aspose.ReplaceWordAspose.findParagraph(ReplaceWordAspose.java:111)
at jp.co.dnp.cio.ngsp.pmxn.lib.document.aspose.TraverseWordAspose.lambda$0(TraverseWordAspose.java:169)
at jp.co.dnp.cio.ngsp.pmxn.lib.document.aspose.TraverseWordAspose.notice(TraverseWordAspose.java:237)
… 53 more
Caused by: java.util.EmptyStackException
at java.base/java.util.Stack.peek(Stack.java:102)
at com.aspose.words.zzwb.zzrn(Unknown Source)
at com.aspose.words.zzYgx.zzYBj(Unknown Source)
at com.aspose.words.zzYgx.zzYBj(Unknown Source)
at com.aspose.words.zzYgx.update(Unknown Source)
at com.aspose.words.zzwb.(Unknown Source)
at com.aspose.words.zzHu.zzXZq(Unknown Source)
at com.aspose.words.zzHu.zzXdi(Unknown Source)
at com.aspose.words.Range.replace(Unknown Source)
at com.aspose.words.Range.replace(Unknown Source)
at jp.co.dnp.cio.ngsp.pmxn.lib.document.aspose.ReplaceWordAspose.replace(ReplaceWordAspose.java:140)
… 56 more

原因を教えてください。
バージョン21.4の時は、このエラーは発生しませんでした。

こんにちは @KazukiEndou

Aspose.Wordsの最新バージョンは22.3です。 このバージョンで問題を再現できるかどうかを確認してください。

Aspose.Wordsの最新バージョンでも問題が再現できる場合は、サンプルドキュメントとサンプルコードを添付してください。 私たちは、私たちの側で問題を再現して分析しようとします。

ライセンスの都合上、22.1までの確認しか出来ません。
22.1では、同じエラーが発生しました。

サンプルプログラムを添付します。調査をお願いします。

実装プログラム:ReplaceWordAspose
テストプログラム:ReplaceWordAsposeTest
Wordファイル:Reference-Annotation.docx
Desktop.zip (85.2 KB)

@KazukiEndou,

以下のコードは、プログラムの簡略版です。このコードと Aspose.Words 21.12および22.1で問題を再現しようとしました。このコードは正しく機能し、例外は発生しません。

問題を再現できる最小のコードを提供するようにしてください。また、OSやJavaのバージョンなどの環境に関する詳細も提供してください。

Document doc = new Document( "Reference-Annotation.docx");

LinkedHashMap<String, String> replacementMap = new LinkedHashMap<String, String>();
replacementMap.put("挿入", "★挿入★");
replacementMap.put("テスト", "★テスト★");
replacementMap.put("ホルダー", "★ホルダー★");

for (Map.Entry<String, String> entry : replacementMap.entrySet()) {
    doc.getRange().replace(entry.getKey(), entry.getValue());
}

doc.save("Reference-Annotation.docx.21.12.replaced.docx");

docs.zip (26.0 KB)

回答ありがとうございます。
上記で提供いただいたソースだと、動作することは確認できました。

前回お送りしたソースで足りていないものがありましたので、添付します。
添付ファイル:ReplaceWordAsposeから呼び出している、TraverseWordAsposeを添付します。

提供いただいたソースと違う点は、docxファイルを、Document化した後に、
Document→Section→Node→Paragraphと読み込んでいっています。
この過程で、冒頭で記載したエラー(java.util.EmptyStackException)が発生します。

さらに情報を追加します。
・Aspose21.10までは、正常に動作しますが、21.11以降だと上記エラーになります。
ライセンス更新できたので、22.3でも確認しましたが、同じエラーとなりました。
・実行環境は、Windows10で、Eclipseで動作確認しています。
・Javaは、 Java11(Amazon Corretto)になります。

addSource.zip (88.3 KB)

提供いただいたサンプルコードをベースに、問題が発生するものを用意しました。

こちらも合わせて、ご確認ください。サンプル.zip (883 Bytes)

@KazukiEndou, 問題を再現しました。 この問題は、WORDSNET-23658として記録されています。 問題が修正された後、このスレッドで通知されます。

The issues you have found earlier (filed as WORDSNET-23658) have been fixed in this Aspose.Words for Java 22.5 update also available on Maven.