我有一个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文件夹中。
我是否只是错误地定义了我的导入,或者文件是否位于错误的位置?
答案 0 :(得分:0)
您的运行时类路径上似乎没有docx4j
JAR。上面的代码似乎属于Grails控制器。您是否检查过NoClassDefFoundError
引用的类是否存在于Grails docx4j
目录中的/lib
JAR中?
答案 1 :(得分:0)
看起来未找到的类位于org.docx4j.wml包中,但import语句引用org.docx4j包。尝试将导入更改为import org.docx4j.wml.*;
。