簡體   English   中英

復雜的Web應用程序上的ConversionInputException

[英]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應用程序變得復雜 由於響應表明您的文件已損壞,並且由於轉換器可以在沒有應用程序復雜部分的情況下正常工作,因此我認為您確實在某個時刻損壞了文件。

我可以建議您嘗試調試的內容:

  1. 實現一個偽轉換器,該偽轉換器僅接收字節數組並發送回一個偽文件。 檢查接收到的字節等於原始文件的字節。 也許您正在切斷一些價值?
  2. 將您的應用程序逐步簡化為可以運行的簡單應用程序,並查看過程中的哪一步破壞了您的前提。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM