无法在CentOS上使用Tika解析outlook主体

时间:2014-07-03 17:49:18

标签: java apache-tika

我试图使用Tika解析Outlook消息的html主体。当我在我的Windows机器上运行以下方法时它工作正常,我得到电子邮件正文的纯文本表示。

private String parseHtml(InputStream stream) throws Exception {
    ContentHandler contenthandler = null;
    try {
        Metadata metadata = new Metadata();
        Parser parser = new AutoDetectParser();
        contenthandler = new BodyContentHandler();
        parser.parse(stream, contenthandler, metadata, new ParseContext());
        System.out.println(contenthandler.toString());
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    return contenthandler != null ? contenthandler.toString() : null;
}

然而,当我在CentOS VM和物理服务器上运行相同的代码时,我获得了所有的outlook标记。 Windows中发生了一些事情,使Tika能够检测到centos上没有的文档类型。元数据显示我调试时:

Windows:Content-Encoding = US-ASCII Generator = Microsoft Word 14(过滤媒体)Content-Type = text / html;字符集= US-ASCII Linux:Content-Encoding = US-ASCII Content-Type = text / plain; charset = US-ASCII

1 个答案:

答案 0 :(得分:1)

宣传回答评论......

你错过了一些Tika罐子或它们的依赖

如果您使用命令行Tika App jar,那么您需要的所有内容都在其中,并且它是独立运行的。同样,Tika Server jar完全独立。

对于OSGi类型,你需要Tika Core和Tika Bundle,但这应该是捆绑包含Tika Parsers及其依赖项/参考。

否则,如果您使用Java中的Tika,则需要Tika Core,Tika Parsers以及它们各自的依赖项。如果您依赖tika-coretika-parsers,Maven可以为您提供依赖关系,但您仍需要确保部署方法包含那些依赖项。

如果您错过了Tika Parsers jar和/或其依赖项,那么您仍然会有Tika,但没有解析器,因此解析不会返回内容。您可以通过Tika Config对象获取可用的解析器,并检查您是否拥有所需的所有解析器。