Page 1 of 1

NoClassDefFoundError: com/sun/xml/internal/bind/marshaller/N

PostPosted: Mon Sep 05, 2011 8:43 pm
by tosswang
hi,jason:
when i test below code ,an exception java.lang.NoClassDefFoundError: com/sun/xml/internal/bind/marshaller/NamespacePrefixMapper occur.
Code: Select all
import java.io.File;
import java.util.List;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.Body;


public class RemoveParagraph
{
   public static void main(String[] args) throws Exception {
      String inputfilepath =  "C://workspace//D.docx";            
      WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath));      
      MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();
      
      org.docx4j.wml.Document wmlDocumentEl = (org.docx4j.wml.Document) documentPart
            .getJaxbElement();
      Body body = wmlDocumentEl.getBody();
      
      String xpath1="//w:p[w:r[w:t[contains(text(),'Tag1')]]]|//w:p[w:r[w:t[contains(text(),'Tag1')]]]/following-sibling::node()[count(.|//w:p[w:r[w:t[contains(text(),'Tag11')]]]/preceding-sibling::node())=count(//w:p[w:r[w:t[contains(text(),'Tag11')]]]/preceding-sibling::node())] |//w:p[w:r[w:t[contains(text(),'Tag11')]]]";
      List<Object> list = documentPart.getJAXBNodesViaXPath(xpath1, false);
      
      for(int i=0;i<list.size();i++)
      {
         org.docx4j.wml.P p = (org.docx4j.wml.P) list.get(i);
         body.getContent().remove(p);
      }
      
      wordMLPackage.save(new File("c:\\workspace\\dd_out.docx"));
   }
}


my operating environment is jdk1.5、jaxb-2_1_9、docx4j-2-7.jar...attachment is my test document.

when i remove the table of the test document,the exception will not occur,but i insert a table into the test document,the exception occur.

thanks in advance!

tosswang

Re: NoClassDefFoundError: com/sun/xml/internal/bind/marshall

PostPosted: Mon Sep 05, 2011 10:33 pm
by jason
Can you post the stack trace?

Re: NoClassDefFoundError: com/sun/xml/internal/bind/marshall

PostPosted: Tue Sep 06, 2011 1:41 pm
by tosswang
log4j:WARN No appenders could be found for logger (org.docx4j.jaxb.Context).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/xml/internal/bind/marshaller/NamespacePrefixMapper
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at org.docx4j.jaxb.NamespacePrefixMapperUtils.getPreferredPrefix(NamespacePrefixMapperUtils.java:120)
at org.docx4j.XmlUtils.JAXBElementDebug(XmlUtils.java:213)
at org.docx4j.XmlUtils.getJAXBNodesViaXPath(XmlUtils.java:872)
at org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart.getJAXBNodesViaXPath(MainDocumentPart.java:159)
at org.RemoveParagraph.main(RemoveParagraph.java:31)

Re: NoClassDefFoundError: com/sun/xml/internal/bind/marshall

PostPosted: Thu Sep 08, 2011 1:03 am
by jason
Please try http://www.docx4java.org/docx4j/docx4j- ... 110907.jar and let me know whether it helps.

Re: NoClassDefFoundError: com/sun/xml/internal/bind/marshall

PostPosted: Thu Sep 08, 2011 2:29 pm
by tosswang
hi,jason :

when i replact docx4j-2.7.0.jar with docx4j-nightly-20110907.jar,the code throw an exception

Code: Select all
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
   at java.lang.ClassLoader.defineClass1(Native Method)
   at java.lang.ClassLoader.defineClass(Unknown Source)
   at java.security.SecureClassLoader.defineClass(Unknown Source)
   at java.net.URLClassLoader.defineClass(Unknown Source)
   at java.net.URLClassLoader.access$100(Unknown Source)
   at java.net.URLClassLoader$1.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.net.URLClassLoader.findClass(Unknown Source)
   at java.lang.ClassLoader.loadClass(Unknown Source)
   at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
   at java.lang.ClassLoader.loadClass(Unknown Source)
   at java.lang.ClassLoader.loadClassInternal(Unknown Source)
   at org.RemoveParagraph.main(RemoveParagraph.java:18)


When I use docx4j-2.7.0.jar not encountered this problem.
By the way,the method output of org.docx4j.convert.out.pdf.PdfConversion is added a parameter,How should I set this parameter?

Any help is appreciated. Thanks!

tosswang

Re: NoClassDefFoundError: com/sun/xml/internal/bind/marshall

PostPosted: Sun Sep 11, 2011 6:57 pm
by jason
Oops, somehow that must have been compiled to use 1.6. Sorry about that.

Please try http://www.docx4java.org/docx4j/docx4j- ... 110911.jar

I'll reply in a separate thread to your PdfConversion question.

cheers .. Jason

Re: NoClassDefFoundError: com/sun/xml/internal/bind/marshall

PostPosted: Tue Sep 13, 2011 7:30 pm
by tosswang
thanks jason, the jar docx4j-nightly-20110911.jar works correctly.but, i meet a issue,the table of the document isn't removed .below is my lately code

Code: Select all
package org;

import java.io.File;
import java.util.List;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.Body;


public class RemoveParagraph
{
   public static void main(String[] args) throws Exception {
      String inputfilepath =  "C://workspace//D.docx";            
      WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath));      
      MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();      
      org.docx4j.wml.Document wmlDocumentEl = (org.docx4j.wml.Document) documentPart.getJaxbElement();
      Body body = wmlDocumentEl.getBody();      
      String xpath2="//w:p[w:r[w:t[contains(text(),'Tag2')]]]|//w:p[w:r[w:t[contains(text(),'Tag2')]]]/following::node()[count(.|//w:p[w:r[w:t[contains(text(),'Tag22')]]]/preceding::node())=count(//w:p[w:r[w:t[contains(text(),'Tag22')]]]/preceding::node())] |//w:p[w:r[w:t[contains(text(),'Tag22')]]]";      
      List<Object> list = documentPart.getJAXBNodesViaXPath(xpath2, false);      
      for(int i=0;i<list.size();i++)
      {
         if(list.get(i) instanceof org.docx4j.wml.P)
         {
            org.docx4j.wml.P p = (org.docx4j.wml.P) list.get(i);
            body.getContent().remove(p);
         }
         else if(list.get(i) instanceof org.docx4j.wml.Tbl)
         {
            org.docx4j.wml.Tbl tbl = (org.docx4j.wml.Tbl) list.get(i);
            body.getContent().remove(tbl);
         }
      }
      
      wordMLPackage.save(new File("c:\\workspace\\dd_out.docx"));
   }
}


i can't get org.docx4j.wml.Tbl though there is a table in the test document....

how can i get org.docx4j.wml.Tbl?

the attachment is my test document.

Any help is appreciated. Thanks!

tosswang

Re: NoClassDefFoundError: com/sun/xml/internal/bind/marshall

PostPosted: Tue Sep 13, 2011 9:19 pm
by tosswang
aha,jason,i resolve my issue,my code is

Code: Select all
package org;

import java.io.File;
import java.util.List;

import javax.xml.bind.JAXBElement;

import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.Body;


public class RemoveParagraph
{
   public static void main(String[] args) throws Exception {      
      String inputfilepath =  "C://workspace//D.docx";
            
      WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath));      
      MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();
      
      org.docx4j.wml.Document wmlDocumentEl = (org.docx4j.wml.Document) documentPart
            .getJaxbElement();
      Body body = wmlDocumentEl.getBody();
      
      String xpath2="//w:p[w:r[w:t[contains(text(),'Tag2')]]]|//w:p[w:r[w:t[contains(text(),'Tag2')]]]/following-sibling::node()[count(.|//w:p[w:r[w:t[contains(text(),'Tag22')]]]/preceding-sibling::node())=count(//w:p[w:r[w:t[contains(text(),'Tag22')]]]/preceding-sibling::node())] |//w:p[w:r[w:t[contains(text(),'Tag22')]]]";      

      List<Object> list = documentPart.getJAXBNodesViaXPath(xpath2, false);
      
      for(int i=0;i<list.size();i++)
      {
         if(list.get(i) instanceof org.docx4j.wml.P)
         {
            org.docx4j.wml.P p = (org.docx4j.wml.P) list.get(i);
            body.getContent().remove(p);
         }
         if (list.get(i) instanceof javax.xml.bind.JAXBElement)   
         {            
            if((((JAXBElement) list.get(i)).getDeclaredType().getName()).equals("org.docx4j.wml.Tbl"))
            {               
               body.getContent().remove(list.get(i));
            }
         }
      }
      
      wordMLPackage.save(new File("c:\\workspace\\dd_out.docx"));
   }
}


docx4j-2.7.0 is enough for me.

jason,thank you very much!!!

tosswang