Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用apache tika Parser对象解析.doc和.docx文件格式时出现的问题_Java_Parsing_Apache Tika_File Type_.doc - Fatal编程技术网

Java 使用apache tika Parser对象解析.doc和.docx文件格式时出现的问题

Java 使用apache tika Parser对象解析.doc和.docx文件格式时出现的问题,java,parsing,apache-tika,file-type,.doc,Java,Parsing,Apache Tika,File Type,.doc,当我尝试使用org.apache.tika.parser.parser和DefaultDetector()来检测和解析.doc和.docx文件格式时。但是我从Tika jars中抛出了一些错误(不是异常),这里没有任何有用的堆栈跟踪。我可以确认它仅在.doc和.docx中发生。PDF,jpeg,文本都可以。有人遇到过.doc和.docx文件格式的问题吗?你们有什么解决办法吗 我的代码如下: unzippedBytes = loadUnzippedByteCode(attachment.getCo

当我尝试使用
org.apache.tika.parser.parser
DefaultDetector()
来检测和解析.doc和.docx文件格式时。但是我从Tika jars中抛出了一些错误(不是异常),这里没有任何有用的堆栈跟踪。我可以确认它仅在.doc和.docx中发生。PDF,jpeg,文本都可以。有人遇到过.doc和.docx文件格式的问题吗?你们有什么解决办法吗

我的代码如下:

unzippedBytes = loadUnzippedByteCode(attachment.getContents()); /* This is utility method written using native Java Zip library - returns byte array byte[] */

            /* All the objects below were declared beforehand, but not initialised until now */

            parseContextObj = new ParseContext();
            dObj = new DefaultDetector();
            detectedParser = new AutoDetectParser(dObj);
            context.set(Parser.class, parser);
            OutputStream outputstream = new ByteArrayOutputStream();
            metadata = new Metadata();

            InputStream input = TikaInputStream.get(unzippedBytes, metadata);
            ContentHandler handler = new BodyContentHandler(outputstream);
            detectedParser.parse(input, handler, metadata, parseContextObj); // This is where it is throwing NoSuchMethodError - cannot understand why and also cannot get the stacktrace - using tika 1.10 */ 
            input.close();
上面的代码也是我在其他一些SO问题中发现的,并决定将其用于我的工作。另外,我使用的字节[]是从非常旧的struts 1.0 FormFile接口(返回字节[]的getFileData()接收到的。我曾经使用bullhorn的irex解析器进行解析,但出于许多原因,我决定使用Tika。字节[]可以在irex中正常工作,但每当我试图解析.docx和.doc内容时就会出现问题

以下是由于隐私原因我屏蔽的堆栈跟踪的某些部分:

2016-01-15 16:21:06,947 [http-apr-80-exec-3] [ERROR] XXXXX.XXXX.XXXXService - java.lang.NoSuchMethodError: org.apache.poi.util.POILogger.log(I[L
java/lang/Object;)V
        at org.apache.poi.openxml4j.opc.PackageRelationshipCollection.parseRelationshipsPart(PackageRelationshipCollection.java:313)
        at org.apache.poi.openxml4j.opc.PackageRelationshipCollection.<init>(PackageRelationshipCollection.java:163)
        at org.apache.poi.openxml4j.opc.PackageRelationshipCollection.<init>(PackageRelationshipCollection.java:131)
        at org.apache.poi.openxml4j.opc.PackagePart.loadRelationships(PackagePart.java:561)
        at org.apache.poi.openxml4j.opc.PackagePart.<init>(PackagePart.java:109)
        at org.apache.poi.openxml4j.opc.PackagePart.<init>(PackagePart.java:80)
        at org.apache.poi.openxml4j.opc.PackagePart.<init>(PackagePart.java:125)
        at org.apache.poi.openxml4j.opc.ZipPackagePart.<init>(ZipPackagePart.java:78)
        at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:245)
        at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:684)
        at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:227)
        at org.apache.tika.parser.pkg.ZipContainerDetector.detectOPCBased(ZipContainerDetector.java:208)
        at org.apache.tika.parser.pkg.ZipContainerDetector.detectZipFormat(ZipContainerDetector.java:145)
        at org.apache.tika.parser.pkg.ZipContainerDetector.detect(ZipContainerDetector.java:88)
        at org.apache.tika.detect.CompositeDetector.detect(CompositeDetector.java:77)
        at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:112)

我浏览了包,没有找到任何POIXMLTypeLoader类。这是一个已知的问题吗?有人能回复我吗?

确保没有过时的POI罐,并使用与您尝试使用的Tika版本相匹配的POI版本


POI3.13发布后,类
POIXMLTypeLoader
被添加到了POI中,因此您似乎以某种方式混合了新版本。只有版本POI 3.14-beta1知道这个类!确保您没有以某种方式包含该版本。

您使用的是什么版本?您是否尝试将日志记录级别更改为THROW(请参阅“加载错误处理”)?什么不起作用?错误是什么?@Gagravarr当我使用debugger watch时,我看到parser.parse方法抛出NoSuchMethod。如上所述,我将尝试更改日志记录级别,以查看是否有任何更改。这意味着您已经在应用程序中塞满了Apache Tika及其依赖项!关于如何检查Tika的日志配置,有什么帮助吗?在我的项目(继承的)中,我看不到任何包含tika日志的xml文件。还有,我的提卡罐是1.10
java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader
        at org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument$Factory.parse(Unknown Source)
        at org.apache.poi.xwpf.usermodel.XWPFDocument.onDocumentRead(XWPFDocument.java:158)
        at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:167)
        at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:119)
        at org.apache.poi.xwpf.extractor.XWPFWordExtractor.<init>(XWPFWordExtractor.java:59)
        at org.apache.poi.extractor.ExtractorFactory.createExtractor(ExtractorFactory.java:204)
        at org.apache.tika.parser.microsoft.ooxml.OOXMLExtractorFactory.parse(OOXMLExtractorFactory.java:86)
        at org.apache.tika.parser.microsoft.ooxml.OOXMLParser.parse(OOXMLParser.java:87)
        at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:280)
        at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:280)
        at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:120)
        at xxx.xxx.xxx.xxx.xxxxxAttachmentWithTika(xxxService.java:792)