首页 > 解决方案 > Apache Tika ArchiveStreamFactory.detect 错误

问题描述

我正在使用 java 和 apache tika 1.18 将一些文件转换为 TXT。当我尝试使用 AutoDetectParser() 时,出现错误:

[ERROR ] 错误处理过程中发生错误,放弃!org.apache.commons.compress.archivers.ArchiveStreamFactory.detect(Ljava/io/InputStream;)Ljava/lang/String; [错误] SRVE0777E:应用程序类 'org.apache.cxf.service.invoker.AbstractInvoker.createFault:162' org.apache.cxf.interceptor.Fault 抛出异常:org.apache.commons.compress.archivers.ArchiveStreamFactory.detect (Ljava/io/InputStream;)Ljava/lang/String; 在 [internal classes] 的 org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162) 引起:java.lang.NoSuchMethodError: org.apache.commons.compress.archivers.ArchiveStreamFactory.detect(Ljava /io/InputStream;)Ljava/lang/String;

我在网上搜索,发现这个错误与 commom_compress 的错误版本有关,看来这个方法在 commom_compress 的 1.14 之前的版本中不存在。在我的情况下,版本是 1.16.1。

构建项目后,我检查了里面的库,只有正确的版本。

我正在使用 IBM Liberty 18.0 ...现在我真的迷失了解决这个问题的选项。

当我使用特定的解析器(如 PDFParser())时,一切正常!

有任何想法吗?

谢谢

标签: javawebsphere-libertyapache-tika

解决方案


问题来源:

Spark 2.x发行版包括旧版本的 commons-compress,而Tikalibrary 依赖于commons-compresslibrary 的 1.18 版本。

解决方案

在 spark-shell 或 spark-submit 中使用 --driver-class-path 参数来指向正确版本的 commons-compress 库。

spark-submit 
     --driver-class-path ~/.m2/repository/org/apache/commons/commons-compress/1.18/commons-compress-1.18.jar
     --class {you.main.class}
....

在这里查看我的详细答案。


推荐阅读