[英]ConversionInputException on a complex web application
當我在特定的轉換器上調用execute()
或schedule()
方法時,就遇到了ConversionInputException
。
我認為代碼是正確的,因為如果我將代碼作為簡單的Java應用程序執行,則可以與輸入相同的文件完美地工作。
當我將代碼部署為jar並從復雜的Web應用程序調用代碼時,我始終會遇到此ConversionInputException
。
我也嘗試用File對象的InputStream
插入,但是有相同的異常。
我可以用MS-Word打開文件,沒有任何問題,而且我還可以在運行相同代碼的獨立Java應用程序中對其進行轉換。
這是我使用的代碼
private void convert(File inputFile, File outputFile) {
boolean conversion=false;
IConverter converter=com.b80.common.d2.wf.utility.CustomConverter.getInstance().getConverter();
conversion = converter.convert(inputFile).as(DocumentType.MS_WORD)
.to(outputFile).as(DocumentType.PDF)
.prioritizeWith(1000).execute();
}
轉換器類的開發如下:我必須使用同步方法,因為可以通過服務器上的多個線程訪問該轉換器的實例:
import java.io.File;
import java.util.concurrent.TimeUnit;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
public class CustomConverter {
private static IConverter converter=null;
private static final String CONVERSION_FOLDER="E:\\temp\\document4j";
private static CustomConverter instance = null;
private CustomConverter() {
// Exists only to defeat instantiation.
}
public static synchronized CustomConverter getInstance() {
if(instance == null) {
instance = new CustomConverter();
}
return instance;
}
public synchronized IConverter getConverter() {
if(converter==null || !converter.isOperational()) {
converter=LocalConverter.builder().baseFolder(new File(CONVERSION_FOLDER)).workerPool(20, 25, 5, TimeUnit.MINUTES)
.processTimeout(10, TimeUnit.MINUTES)
.build();
}
return converter;
}
}
這是StackTrace,顯然在convert()
函數上是例外。
2016-04-28 16:52:21,483 ERROR [STDERR] (http-0.0.0.0-9080-1) com.documents4j.throwables.ConversionInputException: The input file seems to be corrupt
2016-04-28 16:52:21,484 ERROR [STDERR] (http-0.0.0.0-9080-1) at com.documents4j.util.Reaction$ConversionInputExceptionBuilder.make(Reaction.java:159)
2016-04-28 16:52:21,484 ERROR [STDERR] (http-0.0.0.0-9080-1) at com.documents4j.util.Reaction$ExceptionalReaction.apply(Reaction.java:75)
2016-04-28 16:52:21,484 ERROR [STDERR] (http-0.0.0.0-9080-1) at com.documents4j.conversion.ExternalConverterScriptResult.resolve(ExternalConverterScriptResult.java:70)
2016-04-28 16:52:21,484 ERROR [STDERR] (http-0.0.0.0-9080-1) at com.documents4j.conversion.ProcessFutureWrapper.evaluateExitValue(ProcessFutureWrapper.java:48)
2016-04-28 16:52:21,484 ERROR [STDERR] (http-0.0.0.0-9080-1) at com.documents4j.conversion.ProcessFutureWrapper.get(ProcessFutureWrapper.java:36)
2016-04-28 16:52:21,484 ERROR [STDERR] (http-0.0.0.0-9080-1) at com.documents4j.conversion.ProcessFutureWrapper.get(ProcessFutureWrapper.java:11)
2016-04-28 16:52:21,484 ERROR [STDERR] (http-0.0.0.0-9080-1) at com.documents4j.job.AbstractFutureWrappingPriorityFuture.run(AbstractFutureWrappingPriorityFuture.java:78)
2016-04-28 16:52:21,484 ERROR [STDERR] (http-0.0.0.0-9080-1) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
2016-04-28 16:52:21,484 ERROR [STDERR] (http-0.0.0.0-9080-1) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
2016-04-28 16:52:21,484 ERROR [STDERR] (http-0.0.0.0-9080-1) at java.lang.Thread.run(Thread.java:662)
我對代碼進行了更深入的分析,並將一些日志添加到word_convert.vbs中,獲得了如下錯誤消息:
Error # 424 Object required
我知道這是一些通用信息,但我希望它可以有所幫助。
我是documents4j的作者,通常,我認為這是一個用戶問題,因為我已經在許多環境中成功運行documents4j,並且從未遇到過此類問題。
很難說是什么問題,因為我不知道到底是什么使您的Web應用程序變得復雜 。 由於響應表明您的文件已損壞,並且由於轉換器可以在沒有應用程序復雜部分的情況下正常工作,因此我認為您確實在某個時刻損壞了文件。
我可以建議您嘗試調試的內容:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.