Cómo evitar java.lang.NoClassDefFoundError

Tengo un código para agregar los textos al archivo .doc existente y lo guardaré como otro nombre utilizando el POI de apache.

El siguiente es el código que he intentado hasta ahora

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="abc@gmail.com"; 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(); } } } 

Lo siguiente es lo que tengo

  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.(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 

He agregado todos los archivos jar correspondientes a esto, pero aún no puedo encontrar la solución. Soy nuevo en este apache poi, así que ayúdenme con algunas explicaciones y ejemplos. Gracias

Copiado de mi comentario hecho a la pregunta:

Parece que necesita poi-ooxml-schemas.jar que viene en la distribución de PDI de Apache. El solo hecho de agregar un solo flask no significa que tenga todas las clases del marco.


Después de resolver el problema en base a mi comentario (o las respuestas de otras personas), tiene esta nueva excepción

 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 

Leyendo Apache POI – HWPF – API de Java para manejar archivos de Microsoft Word , parece que está usando la clase incorrecta para manejar documentos de 2003 – word: HWPF es el nombre de nuestro puerto del formato de archivo Microsoft Word 97 (-2007) para Java puroEl socio de HWPF para el nuevo formato .docx de Word 2007 es XWPF. . Esto significa que necesita la clase HWPFDocument para manejar el documento o cambiar su documento de Word 2003 a Word 2007+.

En mi opinión, Apache POI es una buena solución para manejar archivos de Excel, pero buscaría otras opciones para manejar documentos de Word. Verifique esta pregunta para obtener más información relacionada.

Esta es la jerarquía de dependencias para poi-ooxml-3.9.jar .

enter image description here

Lo que significa que cualquiera de ellos se puede utilizar en tiempo de ejecución, incluso si no se utilizan en tiempo de comstackción.

Asegúrate de tener todos los flasks en el classpath de tu proyecto.

Agregue esta dependencia en su archivo de configuración:

  org.apache.poi ooxml-schemas 1.3  

o

 System couldn't find the 

poi-ooxml-schemas-xx.xx.jar

Por favor agregue la biblioteca a su classpath.

La clase org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument.Factory se encuentra en el archivo ooxml-schemas-1.0.jar que se puede descargar aquí

Obtiene ese error porque no tiene la dependencia adecuada para XWPFDocument. ooxml-schemas requiere xmlbeans, y ooxml requiere poi y ooxml-schemas, etc …

Consulte aquí: http://poi.apache.org/overview.html#components

Pensé en reportar mi experiencia con este error. Comencé a sacarlo de la nada y no había cambiado nada en mi área de trabajo. Resulta que ocurre al intentar leer un archivo de Excel que tiene más de 1 hoja (la segunda hoja era una tabla dinámica, una gran cantidad de datos. No estoy seguro de si se debe al tamaño de los datos (sospecho que sí, porque HE LEÍDO los archivos de Excel que contienen más de 1 hoja de trabajo). Cuando eliminé esa segunda hoja, funcionó. No se necesitan cambios en la ruta de clase.

org.apache.poi.POIXMLException: org.apache.xmlbeans.XmlException: Element themeManager @ http://schemas.openxmlformats.org/drawingml/2006/main no es un libro válido @ http://schemas.openxmlformats.org/ hoja de cálculo / 2006 / documento principal o una sustitución válida.

Solución : use el formato .xlsx en lugar de .xls

FWIW tuve que añadir esto:

 compile 'org.apache.poi:ooxml-schemas:1.3' 

Para mi caso tuve diferentes versiones de poi (s). poi-scratchpad fue de 3.9 y todos los demás – poi, poi-ooxml, poi-ooxml-schemas fueron de 3.12. Cambié la versión de poi-scratchpad a 3.12 también y todo comenzó a funcionar.

Si no está utilizando maven para las dependencias de su proyecto. Deberías tener los siguientes jar en tu classpath enter image description here