Author: maxcom
Date: Mon Sep  5 10:30:28 2011
New Revision: 1165230

URL: http://svn.apache.org/viewvc?rev=1165230&view=rev
Log:
Embedded file extraction is broken for some OOXML files (bug introduced few 
commits ago)

Added:
    
tika/trunk/tika-parsers/src/test/resources/test-documents/EmbeddedDocument.docx 
  (with props)
Modified:
    
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/AbstractOOXMLExtractor.java
    
tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/POIContainerExtractionTest.java

Modified: 
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/AbstractOOXMLExtractor.java
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/AbstractOOXMLExtractor.java?rev=1165230&r1=1165229&r2=1165230&view=diff
==============================================================================
--- 
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/AbstractOOXMLExtractor.java
 (original)
+++ 
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/AbstractOOXMLExtractor.java
 Mon Sep  5 10:30:28 2011
@@ -38,6 +38,7 @@ import org.apache.tika.extractor.Parsing
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.microsoft.OfficeParser;
 import org.apache.tika.sax.EmbeddedContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.xmlbeans.XmlException;
@@ -151,11 +152,9 @@ public abstract class AbstractOOXMLExtra
             Metadata metadata = new Metadata();
             TikaInputStream stream = null;
 
-            DirectoryNode root = fs.getRoot();
-            if (root.hasEntry("CONTENTS")) {
-                stream = TikaInputStream.get(
-                        fs.createDocumentInputStream("CONTENTS"));
-            } else if (root.hasEntry("\u0001Ole10Native")) {
+            OfficeParser.POIFSDocumentType dt = 
OfficeParser.POIFSDocumentType.detectType(fs);
+
+            if (dt.equals(OfficeParser.POIFSDocumentType.OLE10_NATIVE)) {
                 Ole10Native ole =
                         Ole10Native.createFromEmbeddedOleObject(fs);
                 metadata.set(Metadata.RESOURCE_NAME_KEY, ole.getLabel());
@@ -163,13 +162,15 @@ public abstract class AbstractOOXMLExtra
                 if (data != null) {
                     stream = TikaInputStream.get(data);
                 }
-            }
 
-            if (stream != null
-                    && embeddedExtractor.shouldParseEmbedded(metadata)) {
-                embeddedExtractor.parseEmbedded(
-                        stream, new EmbeddedContentHandler(handler),
-                        metadata, false);
+                if (stream != null
+                        && embeddedExtractor.shouldParseEmbedded(metadata)) {
+                    embeddedExtractor.parseEmbedded(
+                            stream, new EmbeddedContentHandler(handler),
+                            metadata, false);
+                }
+            } else {
+                handleEmbeddedFile(part, handler);
             }
         } catch (FileNotFoundException e) {
             // There was no CONTENTS entry, so skip this part

Modified: 
tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/POIContainerExtractionTest.java
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/POIContainerExtractionTest.java?rev=1165230&r1=1165229&r2=1165230&view=diff
==============================================================================
--- 
tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/POIContainerExtractionTest.java
 (original)
+++ 
tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/POIContainerExtractionTest.java
 Mon Sep  5 10:30:28 2011
@@ -253,4 +253,13 @@ public class POIContainerExtractionTest 
        assertEquals("smbprn.00009008.KdcPjl.pdf", handler.filenames.get(1));
        assertEquals(TYPE_PDF, handler.mediaTypes.get(1));
     }
+
+    public void testEmbeddedOfficeFilesXML() throws Exception {
+        ContainerExtractor extractor = new ParserContainerExtractor();
+        TrackingHandler handler;
+
+        handler = process("EmbeddedDocument.docx", extractor, false);
+        
assertTrue(handler.filenames.contains("Microsoft_Office_Excel_97-2003_Worksheet1.bin"));
+        assertEquals(2, handler.filenames.size());
+    }
 }

Added: 
tika/trunk/tika-parsers/src/test/resources/test-documents/EmbeddedDocument.docx
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/resources/test-documents/EmbeddedDocument.docx?rev=1165230&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
tika/trunk/tika-parsers/src/test/resources/test-documents/EmbeddedDocument.docx
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream


Reply via email to