gpt4 book ai didi

java - 复杂 Web 应用程序上的 ConversionInputException

转载 作者:行者123 更新时间:2023-12-02 03:40:09 25 4
gpt4 key购买 nike

当我在特定转换器上调用 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,显然异常(exception)是在 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. 实现一个伪转换器,仅接收字节数组并发送回虚拟文件。检查接收到的字节是否等于原始文件的字节。也许你正在切断一些值(value)观?
  2. 将您的应用程序逐步简化为可以运行的简单应用程序,并查看流程中的哪一步破坏了您的前提。

关于java - 复杂 Web 应用程序上的 ConversionInputException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36918931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com