Author: nick
Date: Fri Nov  1 19:43:46 2013
New Revision: 1538044

URL: http://svn.apache.org/r1538044
Log:
Fix bug #55733 - XWPFWordExtractor need
s to handle .docx files with neither headers nor footers

Added:
    poi/trunk/test-data/document/55733.docx   (with props)
Modified:
    
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/extractor/XWPFWordExtractor.java
    
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java
    
poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractorBugs.java

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/extractor/XWPFWordExtractor.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/extractor/XWPFWordExtractor.java?rev=1538044&r1=1538043&r2=1538044&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/extractor/XWPFWordExtractor.java 
(original)
+++ 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/extractor/XWPFWordExtractor.java 
Fri Nov  1 19:43:46 2013
@@ -17,7 +17,6 @@
 package org.apache.poi.xwpf.extractor;
 
 import java.io.IOException;
-import java.util.Iterator;
 import java.util.List;
 
 import org.apache.poi.POIXMLDocument;
@@ -34,7 +33,6 @@ import org.apache.poi.xwpf.usermodel.XWP
 import org.apache.poi.xwpf.usermodel.XWPFHyperlinkRun;
 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
 import org.apache.poi.xwpf.usermodel.XWPFRelation;
-import org.apache.poi.xwpf.usermodel.XWPFRun;
 import org.apache.poi.xwpf.usermodel.XWPFSDT;
 import org.apache.poi.xwpf.usermodel.XWPFTable;
 import org.apache.poi.xwpf.usermodel.XWPFTableCell;
@@ -85,24 +83,24 @@ public class XWPFWordExtractor extends P
                System.out.println(extractor.getText());
        }
        
-       public String getText() {
-               StringBuffer text = new StringBuffer();
-               XWPFHeaderFooterPolicy hfPolicy = 
document.getHeaderFooterPolicy();
+    public String getText() {
+        StringBuffer text = new StringBuffer();
+        XWPFHeaderFooterPolicy hfPolicy = document.getHeaderFooterPolicy();
+
+        // Start out with all headers
+        extractHeaders(text, hfPolicy);
+
+        // Process all body elements
+        for (IBodyElement e : document.getBodyElements()){
+               appendBodyElementText(text, e);
+               text.append('\n');
+        }
 
-               // Start out with all headers
-               extractHeaders(text, hfPolicy);
-               
-               // body elements
-      for (IBodyElement e : document.getBodyElements()){
-         appendBodyElementText(text, e);
-         text.append('\n');
-     }
-               
-               // Finish up with all the footers
-               extractFooters(text, hfPolicy);
-               
-               return text.toString();
-       }
+        // Finish up with all the footers
+        extractFooters(text, hfPolicy);
+
+        return text.toString();
+    }
 
    public void appendBodyElementText(StringBuffer text, IBodyElement e){
       if (e instanceof XWPFParagraph){
@@ -178,6 +176,8 @@ public class XWPFWordExtractor extends P
    }
    
        private void extractFooters(StringBuffer text, XWPFHeaderFooterPolicy 
hfPolicy) {
+               if (hfPolicy == null) return;
+               
                if(hfPolicy.getFirstPageFooter() != null) {
                        text.append( hfPolicy.getFirstPageFooter().getText() );
                }
@@ -190,6 +190,8 @@ public class XWPFWordExtractor extends P
        }
 
        private void extractHeaders(StringBuffer text, XWPFHeaderFooterPolicy 
hfPolicy) {
+               if (hfPolicy == null) return;
+               
                if(hfPolicy.getFirstPageHeader() != null) {
                        text.append( hfPolicy.getFirstPageHeader().getText() );
                }

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java?rev=1538044&r1=1538043&r2=1538044&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java
 (original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java
 Fri Nov  1 19:43:46 2013
@@ -351,5 +351,16 @@ public class TestXWPFWordExtractor exten
             assertEquals("controlled content loading-"+targ, true, hit);
         }
         assertEquals("controlled content loading hit count", targs.length, 
hits);
+        ex.close();
+    }
+
+    /** No Header or Footer in document */
+    public void testBug55733() throws Exception {
+        XWPFDocument doc = 
XWPFTestDataSamples.openSampleDocument("55733.docx");
+       XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
+
+        // Check it gives text without error
+        extractor.getText();
+        extractor.close();
     }
 }

Modified: 
poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractorBugs.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractorBugs.java?rev=1538044&r1=1538043&r2=1538044&view=diff
==============================================================================
--- 
poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractorBugs.java
 (original)
+++ 
poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractorBugs.java
 Fri Nov  1 19:43:46 2013
@@ -45,5 +45,4 @@ public final class TestWordExtractorBugs
         // Check it gives text without error
         extractor.getText();
     }
-    
 }

Added: poi/trunk/test-data/document/55733.docx
URL: 
http://svn.apache.org/viewvc/poi/trunk/test-data/document/55733.docx?rev=1538044&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/document/55733.docx
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to