Hello:
I didn’t get the answer I was looking for in the same titled post earlier:
I have two issues; Please take a look at the attached test code:
I start 10 threads and each thread does two things:
- sets license
- loads a document
The test case can be run with two run-time parameters -l and -d
Issue # 1: I get following error:
java.util.concurrent.ExecutionException: com.aspose.words.FileCorruptedException: The document appears to be corrupted and cannot be loaded.
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at com.blox.workflow.util.TestConcurrentDocLoading.testAddElement(TestConcurrentDocLoading.java:116)
at com.blox.workflow.util.TestConcurrentDocLoading.main(TestConcurrentDocLoading.java:56)
Caused by: com.aspose.words.FileCorruptedException: The document appears to be corrupted and cannot be loaded.
at com.aspose.words.Document.a(Document.java:1376)
at com.aspose.words.Document.b(Document.java:1363)
at com.aspose.words.Document.a(Document.java:1251)
at com.aspose.words.Document.(Document.java:248)
at com.aspose.words.Document.(Document.java:232)
at com.aspose.words.Document.(Document.java:227)
at com.blox.workflow.util.TestConcurrentDocLoading$LoadDocumentCallable.call(TestConcurrentDocLoading.java:35)
at com.blox.workflow.util.TestConcurrentDocLoading$LoadDocumentCallable.call(TestConcurrentDocLoading.java:1)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.IllegalStateException: Current state = RESET, new state = FLUSHED
at java.nio.charset.CharsetDecoder.throwIllegalStateException(CharsetDecoder.java:951)
at java.nio.charset.CharsetDecoder.flush(CharsetDecoder.java:640)
at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:769)
at asposewobfuscated.mg.U(Encoding.java:460)
at com.aspose.words.gj.j(PBString.java:38)
at com.aspose.words.iw.m(FileSmartTags.java:142)
at com.aspose.words.iw.c(FileSmartTags.java:99)
at com.aspose.words.iw.(FileSmartTags.java:42)
at com.aspose.words.acl.a(DocReaderCore.java:240)
at com.aspose.words.acl.(DocReaderCore.java:28)
at com.aspose.words.ck.(DocReader.java:32)
at com.aspose.words.Document.b(Document.java:1279)
… 14 more
In an answer to the earlier thread, it was suggested that one can instantiate a Document object
“only if you have different ‘path’ value for each thread. You get one document instance per one thread in such a case.”
This is not possible in my case. I have a template document which all concurrent threads need to load and each will create a separate output by substituting different values in the mail-merge variables.
Issue # 2:
Is there a problem executing License.setLicense() in individual threads. I have occasionally seen 'ConcurrentModificationException’
java.util.concurrent.ExecutionException: java.util.ConcurrentModificationException
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at com.blox.workflow.util.TestConcurrentDocLoading.testAddElement(TestConcurrentDocLoading.java:116)
at com.blox.workflow.util.TestConcurrentDocLoading.main(TestConcurrentDocLoading.java:56)
Caused by: java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at com.aspose.words.da.c(License.java:382)
at com.aspose.words.License.setLicense(License.java:293)
at com.blox.workflow.util.TestConcurrentDocLoading$LoadDocumentCallable.call(TestConcurrentDocLoading.java:31)
at com.blox.workflow.util.TestConcurrentDocLoading$LoadDocumentCallable.call(TestConcurrentDocLoading.java:1)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Appreciate your help.
Parag