0

我有一个 groovy 文件,它试图从我使用 docx4j 设置的 Java 类中调用一些方法来解析 .docx 文件

当我在 Eclipse 中设置一个纯 java 测试程序时,我可以做到这一点。但是,当我设置了 .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)

我不太清楚问题出在哪里 - 这是 thre groovy 文件的相关部分:

 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]);

 }
 }

我与 DocxParser 相关的 java 东西在我的项目文件夹下的 src 文件夹中,而 docx4j jar 在 lib 文件夹中。

我只是错误地定义了我的导入,还是文件在错误的位置?

4

2 回答 2

0

看起来您的运行时类路径中没有docx4jJAR。上面的代码似乎属于 Grails 控制器。您是否检查过 Grails目录中的JAR中NoClassDefFoundError是否存在引用的类?docx4j/lib

于 2010-09-07T14:36:16.627 回答
0

看起来找不到的类在 org.docx4j.wml 包中,但导入语句引用的是 org.docx4j 包。尝试将导入更改为import org.docx4j.wml.*;.

于 2010-09-07T14:48:27.053 回答