2010-09-07 65 views
0

我有试图调用从我已经建立了使用docx4j解析的.docx文件NoClassDefFound试图用Java类和docx4j从Grails的控制器

当我成立了一个Java类的一些方法Groovy文件在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常规文件的一部分:

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文件夹,并且docx4j罐子是lib文件夹中。

难道我只是有我的导入定义不正确,或者是在错误的地方的文件?

+0

您的java代码位于src/java目录中...并且包信息和导入已在这些文件中验证过? – 2010-09-07 20:12:29

回答

0

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

+0

是的,它在那里 – Derek 2010-09-07 14:39:30

0

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

+0

试图..同样的错误 – Derek 2010-09-07 14:53:25