2010-09-07 46 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