2009-08-04 37 views
0

運行一個非常簡單的程序時,我得到一個「java.lang.NoClassDefFoundError:com/hp/hpl/jena/shared/BadURIException」 servlet的。該錯誤指向「Tagger」類的初始化。代碼如下所示java.lang.NoClassDefFoundError:com/hp/hpl/jena/shared/BadURIException運行servlet時

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import my.package.Tagger; 

public class NormaliserServlet extends HttpServlet{ 
    public void doGet(HttpServletRequest req, HttpServletResponse response) throws IOException{ 
     Tagger pot = new Tagger(""); 

     response.setContentType("text"); 
     PrintWriter out = response.getWriter(); 
     out.println("hello"); 
     out.println(pot.someMethod()); 
     out.close(); 

     this.log("Request for normaliser"); 
    } 
} 

戰爭文件包含WEB-INF/lib和類似調用定義「標註器」的JAR文件工作一個servlet之外。我似乎無法找到問題所在。在web.xml中是非常標準太:

<servlet> 
    <servlet-name>normalise</servlet-name> 
    <servlet-class>NormaliserServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>normalise</servlet-name> 
    <url-pattern>/normalise</url-pattern> 
</servlet-mapping> 

我使用溫斯頓作爲servlet容器,但我得到確切同樣的錯誤在Tomcat中。棧跟蹤是:

java.lang.NoClassDefFoundError: com/hp/hpl/jena/shared/BadURIException 
    at NormaliserServlet.doGet(NormaliserServlet.java:13) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:104) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:45) 
    at winstone.ServletConfiguration.execute(ServletConfiguration.java:249) 
    at winstone.RequestDispatcher.forward(RequestDispatcher.java:335) 
    at winstone.RequestHandlerThread.processRequest(RequestHandlerThread.java:244) 
    at winstone.RequestHandlerThread.run(RequestHandlerThread.java:150) 
    at java.lang.Thread.run(Thread.java:619) 

回答

1

它看起來像你錯過了定義BadURIException類的耶拿(?)jar。那個jar也包含在你的WEB-INF/lib目錄中嗎?你有沒有試過在Winstone中查看解壓後的戰爭文件,並檢查相關的罐子是否都在那裏?

+0

好吧,它似乎已經做了伎倆(我現在得到另一個錯誤),但我仍然不明白爲什麼我應該包含一個jar文件,我的應用程序實際上不使用。 Tomcat也做同樣的事情。它應該不是容器的工作來包含它需要的庫嗎?這是winstone/tomcat的設置問題嗎? – brice 2009-08-04 11:20:01

+0

@brice:你確定你的應用程序不使用庫嗎? Tomcat當然不會,我無法想象Winstone會這樣做。 – Thilo 2009-08-04 11:22:16

2

您錯過了Jena project的jar文件。 他們應該在您的WAR文件中。

它可能是您使用的其他庫的間接依賴項。看看堆棧跟蹤,看看Jena和你的代碼之間還有什麼。

0

該類COM/HP/HPL /耶拿/共享/ BadURIException,通過標註器是不是在你的servlet容器的classpath大概實例化。

如果它在你的servlet容器外工作,很可能你的環境中有條目定義類路徑。 檢查類路徑並在Servlet容器的lib目錄中複製缺少的lib。