NoClassDefFound пытается использовать класс Java и docx4j из контроллера Grails - PullRequest
0 голосов
/ 07 сентября 2010

У меня есть groovy-файл, который пытается вызвать некоторые методы из класса Java, который я настроил с помощью docx4j для анализа файлов .docx

Когда я настраиваю чистую тестовую программу Java в Eclipse, яЯ могу сделать это хорошо.Однако, когда у меня настроен файл .groovy, я не получаю ошибок компиляции, но во время выполнения я получаю следующую трассировку стека:

 org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.NoClassDefFoundError: org/docx4j/wml/RPr

at org.jsecurity.web.servlet.JSecurityFilter.doFilterInternal(JSecurityFilter.java:382)

at org.jsecurity.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:180)

 Caused by: java.lang.NoClassDefFoundError: org/docx4j/wml/RPr

at java.lang.Class.getDeclaredMethods0(Native Method)

at java.lang.Class.privateGetDeclaredMethods(Class.java:2395)

at java.lang.Class.getDeclaredMethods(Class.java:1763)

at java.security.AccessController.doPrivileged(Native Method)

at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:33)

at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:20)

at ResumeController$_closure8.doCall(ResumeController.groovy:119)

at ResumeController$_closure8.doCall(ResumeController.groovy)

Я не могу понять, в чем проблема - вотсоответствующая часть файла groovey:

 import mypackage.DocxHelpers.DocxParser;
 import org.docx4j.*;
 class ResumeController{
 def save = {

    File f=new File('c:/dev/temp/test.docx');
    uploadedFile.transferTo(f);

    DocxParser doc=new DocxParser(); //line 119
    def resume=doc.openDocx4j(f);
    f.delete();
    resumeInstance.entireResume=resume;
    flash.message="Resume parsed";
    render(view:'create',model:[resumeInstance:resumeInstance]);

 }
 }

Мои файлы java, связанные с DocxParser, находятся в папке src в папке моего проекта, а jar docx4j - в папке lib.

DoУ меня просто неправильно определен импорт или файлы находятся не в том месте?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2010

Похоже, этот класс, который не найден, находится в пакете org.docx4j.wml, но оператор import ссылается на пакет org.docx4j.Попробуйте изменить импорт на import org.docx4j.wml.*;.

0 голосов
/ 07 сентября 2010

Похоже, у вас нет docx4j JAR-файлов на вашем пути к классам во время выполнения. Код выше, похоже, принадлежит контроллеру Grails. Проверяли ли вы, что класс, на который ссылается NoClassDefFoundError, присутствует в docx4j JAR в каталоге Grails /lib?

...