[英]java.lang.NoClassDefFoundError: Could not initialize class com.hp.hpl.jena.query.Query
[英]java.lang.NoClassDefFoundError: com/hp/hpl/jena/shared/BadURIException on running servlet
運行非常簡單的servlet時,出現“ java.lang.NoClassDefFoundError:com / hp / hpl / jena / shared / BadURIException”錯誤。 錯誤指向“ Tagger”類的初始化。 代碼如下
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");
}
}
war文件包含WEB-INF / lib中定義“ Tagger”的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>
我使用winstone作為servlet容器,但是在Tomcat中卻得到了完全相同的錯誤。 stacktrace是:
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)
您缺少Jena項目中的jar文件。 它們應該在您的WAR文件中。
它可能是您使用的其他某些庫的間接依賴項。 看一下堆棧跟蹤,看看在Jena和您的代碼之間還有什么。
看來您缺少定義了BadURIException類的Jena(?)的jar。 該jar也包含在您的WEB-INF / lib目錄中嗎? 您是否嘗試過查看Winstone中解壓縮的戰爭文件並檢查相關的罐子是否都在那里?
大概由Tagger實例化的此類com / hp / hpl / jena / shared / BadURIException類不在您的servlet容器的類路徑中。
如果它在servlet容器之外工作,則可能是環境中有定義類路徑的條目。 檢查類路徑,然后將缺少的lib復制到servlet容器的lib目錄中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.