【问题标题】:java.lang.NoSuchMethodError: org.apache.commons.io.IOUtils.read with Tika (detect method)java.lang.NoSuchMethodError: org.apache.commons.io.IOUtils.read with Tika(检测方法)
【发布时间】:2022-01-08 03:37:49
【问题描述】:

这是我的方法:

public String retrieveMimeType(InputStream stream, String filename) throws Exception {
         TikaConfig config = TikaConfig.getDefaultConfig();
         Detector detector = config.getDetector();

         TikaInputStream streams = TikaInputStream.get(stream);

         Metadata metadata = new Metadata();
         metadata.add(TikaCoreProperties.RESOURCE_NAME_KEY, filename);
         MediaType mediaType = null;
        mediaType = detector.detect(stream, metadata);
        return mediaType.toString();
    }

它在日志上给了我这个:

java.lang.NoSuchMethodError: org.apache.commons.io.IOUtils.read(Ljava/io/InputStream;[B)I
    at org.apache.tika.detect.apple.BPListDetector.detect(BPListDetector.java:106)
    at org.apache.tika.detect.CompositeDetector.detect(CompositeDetector.java:85)
    at com.hraccess.helper.UserFileValidator.retrieveMimeType(UserFileValidator.java:313)
    at com.hraccess.webclient.servlets.ServletBlob.doPost(ServletBlob.java:429)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)

对于这一行:

at com.hraccess.helper.UserFileValidator.retrieveMimeType(UserFileValidator.java:313)

这是第 313 行:

mediaType = detector.detect(stream, metadata);

那我该怎么办?当我将解析器添加到我的 pom.xml 时,它会出现此错误。如何找到原因?

【问题讨论】:

  • 你的 pom.xml 中也有 commons-io 吗?如果我看好的话,苹果BPListDetector需要它,虽然我不知道为什么它不静态链接它。
  • 上面写着NoSuchMethodError,这使得commons-io 很可能在你的pom.xml 中(至少间接地,通过一个短暂的依赖)。但是这个 IOUtils 没有 read 方法。我认为最可能的原因是您使用的是较旧的 commons-io,它还没有这种方法。使用最新的,正如我在链接中显示的那样。

标签: java apache-tika


【解决方案1】:

堆栈跟踪显示 org.apache.commons.io.IOUtils.read 丢失。这是org.apache.commons.io.IOUtils 中的静态方法,该类是commons-io 包的一部分。

  1. 确保 commons-io 已链接到您的应用程序(检查 pom.xml 或 mvn dependency:tree 输出)。

  2. 确保它在相对较新的版本中链接。 commons-io 的 V2.0 还没有这个方法(link),但是现在的已经有了(link)。一般来说,最好始终使用所有内容的最后一个稳定版本。

【讨论】:

  • 我遇到了同样的错误,我在 pom.xml 中添加了你给我的最后一个 commons-io 依赖项,我仍然有 java.lang.NoSuchMethodError: org.apache.commons.io.IOUtils.read(Ljava/io/InputStream;[B)I :(
  • @ZahreddineLaidi commons-io 在您的mvn dependencies:tree 输出中吗?如果是,使用哪个版本?
  • @ZahreddineLaidi BPListDetectorsource code 清楚地表明它想使用org.apache.commons.io.IOUtils.read。没什么特别的,它是一个简单的静态导入。 它必须工作,99% 你只有一些微不足道的、易于修复的链接问题。检查依赖树并与我分享结果。
  • 是的 commons-io 是 2.11.0,这是行:\- commons-io:commons-io:jar:2.11.0:compile,顺便说一句 mvn dependencies:tree 不起作用,所以我使用了 mvn dependency:tree 这个。 .
  • @ZahreddineLaidi 对,dependency:tree 是正确的我的错误!我确定了答案。所以它存在于编译依赖项中。那么它很可能不在目标 jar 中。你如何运行你的应用程序,你会创建一个胖罐子吗?
猜你喜欢
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多