How to avoid java.lang.NoClassDefFoundError

54,303

Solution 1

Copied from my comment done to the question:

Looks like you need poi-ooxml-schemas.jar that comes in the Apache POI distribution. Just adding a single jar doesn't mean that you have all the classes of the framework.


After solving the problem based on my comment (or another people answers), you have this new Exception

org.apache.xmlbeans.XmlException: error: The document is not a document@http://schemas.openxmlformats.org/wordprocessingml/2006/main: document element mismatch got themeManager@http://schemas.openxmlformats.org/drawingml/2006/main

Reading Apache POI - HWPF - Java API to Handle Microsoft Word Files, it looks like you're using the wrong class to handle 2003- word documents: HWPF is the name of our port of the Microsoft Word 97(-2007) file format to pure Java ... The partner to HWPF for the new Word 2007 .docx format is XWPF.. This means that you need HWPFDocument class to handle the document or change your document from Word 2003- to Word 2007+.

IMO I find Apache POI as a good solution to handling Excel files, but I would look another options to handling Word documents. Check this question to get more related info.

Solution 2

Add this dependency on your config file:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>ooxml-schemas</artifactId>
    <version>1.3</version>
</dependency>

or

System couldn’t find the 

poi-ooxml-schemas-xx.xx.jar

Please add the library to your classpath.

Share:
54,303
Vignesh Vino
Author by

Vignesh Vino

Windchill developer.

Updated on April 27, 2020

Comments

  • Vignesh Vino
    Vignesh Vino about 4 years

    I have a code for adding the texts to existing .doc file and it'll save that as another name by using apache POI.

    The following is the code I have tried so far

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    import org.apache.poi.xwpf.usermodel.XWPFFooter;
    import org.apache.poi.xwpf.usermodel.XWPFTable;
    
    public class FooterTableWriting {
    
        public static void main(String args[])
        {
            String path="D:\\vignesh\\AgileDocTemplate.doc";
            String attch="D:\\Attach.doc";
            String comment="good";
            String stat="ready";
            String coaddr="xyz";
            String cmail="[email protected]";
            String sub="comp";
            String title="Globematics";
            String cat="General";
            setFooter(path, attch, comment, stat, coaddr, cmail, sub, title, cat);
        }
        private static  void setFooter(String docTemplatePath,String attachmentPath,String comments,String status,String coAddress,String coEmail,String subject,String title,String catagory)
        {
              try{
    
                        InputStream input = new FileInputStream(new File(docTemplatePath));
                        XWPFDocument document=new XWPFDocument(input);
                        XWPFHeaderFooterPolicy headerPolicy =new XWPFHeaderFooterPolicy(document);
                        XWPFFooter footer = headerPolicy.getDefaultFooter();
                        XWPFTable[] table = footer.getTables();
    
                        for (XWPFTable xwpfTable : table)
                           {
                               xwpfTable.getRow(1).getCell(0).setText(comments);
                               xwpfTable.getRow(1).getCell(1).setText(status);
                               xwpfTable.getRow(1).getCell(2).setText(coAddress);
                               xwpfTable.getRow(1).getCell(3).setText(coEmail);
                               xwpfTable.getRow(1).getCell(4).setText(subject);
                               xwpfTable.getRow(1).getCell(5).setText(title);
                               xwpfTable.getRow(1).getCell(6).setText(catagory);
    
                           }
    
                      File f=new File (attachmentPath.substring(0,attachmentPath.lastIndexOf('\\')));
    
                      if(!f.exists())
                          f.mkdirs();
    
                      FileOutputStream out = new FileOutputStream(new File(attachmentPath));
                      document.write(out);
                      out.close();
    
                      System.out.println("Attachment Created!");
    
             }
              catch(Exception e)
              {
                  e.printStackTrace();
              }
    
        }
    
    }
    

    The following is what I got

        org.apache.poi.POIXMLException: org.apache.xmlbeans.XmlException: error: The document is not a document@http://schemas.openxmlformats.org/wordprocessingml/2006/main: document element mismatch got themeManager@http://schemas.openxmlformats.org/drawingml/2006/main
        at org.apache.poi.xwpf.usermodel.XWPFDocument.onDocumentRead(XWPFDocument.java:124)
        at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:200)
        at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:74)
        at ext.gt.checkOut.FooterTableWriting.setFooter(FooterTableWriting.java:32)
        at ext.gt.checkOut.FooterTableWriting.main(FooterTableWriting.java:25)
    Caused by: org.apache.xmlbeans.XmlException: error: The document is not a document@http://schemas.openxmlformats.org/wordprocessingml/2006/main: document element mismatch got themeManager@http://schemas.openxmlformats.org/drawingml/2006/main
        at org.apache.xmlbeans.impl.store.Locale.verifyDocumentType(Locale.java:458)
        at org.apache.xmlbeans.impl.store.Locale.autoTypeDocument(Locale.java:363)
        at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1279)
        at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1263)
        at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
        at org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument$Factory.parse(Unknown Source)
        at org.apache.poi.xwpf.usermodel.XWPFDocument.onDocumentRead(XWPFDocument.java:92)
        ... 4 more
    

    I have added all the jar files corresponding to this but still I can't find the solution.I'm new to this apache poi so please help me with some explanations and examples. Thanks

  • Gagravarr
    Gagravarr over 7 years