3

I'm trying to read a word document (.docx) using Apache POI and it gives me this error...

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/compress/utils/InputStreamStatistics at org.apache.poi.openxml4j.util.ZipArchiveThresholdInputStream.(ZipArchiveThresholdInputStream.java:63) at org.apache.poi.openxml4j.opc.internal.ZipHelper.openZipStream(ZipHelper.java:178) at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:104) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:301) at gui.CryptoGUI.selectFileButtonActionPerformed(CryptoGUI.java:645) at gui.CryptoGUI.access$1100(CryptoGUI.java:27) at gui.CryptoGUI$11.actionPerformed(CryptoGUI.java:321) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at com.jtattoo.plaf.BaseButtonListener.mouseReleased(BaseButtonListener.java:65) at java.awt.Component.processMouseEvent(Component.java:6535) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6300) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4891) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4713) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2750) at java.awt.Component.dispatchEvent(Component.java:4713) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

I have below libraries in my classpath,

enter image description here

This is the code which I'm getting this error

private void selectFileButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                 
    final JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
    int returnValue = jfc.showOpenDialog(null);

    if (returnValue == JFileChooser.APPROVE_OPTION) {
        FileInputStream fis = null;
        try {
            selectedFile = jfc.getSelectedFile();
            fileNameText.setText(selectedFile.getAbsolutePath());
            double bytes = selectedFile.length();
            double kilobytes = (bytes / 1024);
            fileSizeLabel.setText("Size : " + (Math.round(kilobytes * 100.0) / 100.0) + " KB");
            fis = new FileInputStream(selectedFile);
            XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis)); // EXCEPTION THROWS FROM HERE
            XWPFWordExtractor extractor = new XWPFWordExtractor(xdoc);
            System.out.println(extractor.getText());


        } catch (FileNotFoundException ex) {
            Logger.getLogger(CryptoGUI.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(CryptoGUI.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvalidFormatException ex) {
            Logger.getLogger(CryptoGUI.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                fis.close();
            } catch (IOException ex) {
                Logger.getLogger(CryptoGUI.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

Looks like I'm missing a library but I think I have added everything I needed for this. What am I missing here?

2 Answers2

5

You use commons-compress-1.9.0 .... InputStreamStatistics is since 1.17 this maybe fix this issue.

pL4Gu33
  • 2,045
  • 16
  • 38
3

As stated in the linked question, a good resource is the POI page. what all are the jar dependencies for apache POI for read and write to excel or xls?

It seems unfortunately hard to get there from Google, or the Apache POI site itself. http://poi.apache.org/components/index.html#components

The commons compress library version looks highly suspect. The latest I see in search.maven.com is 1.19.

Evan
  • 2,441
  • 23
  • 36