我有這ConversionInputException
當我調用或schedule()
方法在一個特定的轉換器。ConversionInputException在複雜的Web應用程序
我認爲這是正確的代碼,因爲如果我作爲一個簡單的Java應用程序執行該代碼,它完全適用於輸入相同的文件。
當我將代碼部署爲jar並從複雜的Web應用程序中調用代碼時,我總是有這個ConversionInputException
。
我也嘗試過InputStream
insted的File對象,但我有同樣的異常。
我可以用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
我知道這是一個有點通用的消息,但我希望它可以多一點幫助。
當詢問異常時的規則#0:POST THE STACK TRACE,並在您的代碼中標識拋出異常的語句。 –