サーブレットでJavaクラスを呼び出しているときに、このエラーが発生します。
これがエラーです。
type Exception report
message Servlet execution threw an exception
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Servlet execution threw an exception
org.Apache.Tomcat.websocket.server.WsFilter.doFilter(WsFilter.Java:52)
root cause
Java.lang.NoClassDefFoundError: com/hp/hpl/jena/query/QueryFactory
com.complexible.common.csv.MuseumData.gts(MuseumData.Java:109)
com.complexible.common.csv.MuseumData.ass(MuseumData.Java:89)
com.complexible.common.csv.MuseumRDF.doGet(MuseumRDF.Java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.Java:620)
javax.servlet.http.HttpServlet.service(HttpServlet.Java:727)
org.Apache.Tomcat.websocket.server.WsFilter.doFilter(WsFilter.Java:52)
root cause
Java.lang.ClassNotFoundException: com.hp.hpl.jena.query.QueryFactory
org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1720)
org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1571)
com.complexible.common.csv.MuseumData.gts(MuseumData.Java:109)
com.complexible.common.csv.MuseumData.ass(MuseumData.Java:89)
com.complexible.common.csv.MuseumRDF.doGet(MuseumRDF.Java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.Java:620)
javax.servlet.http.HttpServlet.service(HttpServlet.Java:727)
org.Apache.Tomcat.websocket.server.WsFilter.doFilter(WsFilter.Java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.55 logs.
これが私のJavaクラスのコードで、SPARQLを使用してRDFファイルからレコードを取得し、コンソールにJSON形式で出力を返します。出力をキャッチして文字列に変換した後、その文字列をサーブレットに使用できます。
package com.complexible.common.csv;
import Java.io.ByteArrayOutputStream;
import Java.io.File;
import Java.io.FileInputStream;
import Java.io.FileNotFoundException;
import Java.io.IOException;
import Java.io.PrintStream;
import Java.lang.NoClassDefFoundError;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.ResultSetFormatter;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
public class MuseumData {
public static void main( String[] args ) throws IOException {
String output=getrec();
System.out.println(output);
}
public static String getrec() throws IOException
{
String spr="prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"+
"prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"+
"prefix crm: <http://www.cidoc-crm.org/cidoc-crm/>\n"+
"prefix owl: <http://www.w3.org/2002/07/owl#>\n"+
"prefix xsd: <http://www.w3.org/2001/XMLSchema#>\n"+
"prefix crm: <http://www.cidoc-crm.org/rdfs/cidoc_crm_v5.0.4_official_release.rdfs#>\n"+
"\n"+
//?title ?person ?type instead of *
"SELECT * WHERE { <http://phdprototype.tk/collectionimage/4D0BFF17-5810-4644-A550-D35EE090D4A8.png>"+
"crm:P3_has_note ?title ; "+
"crm:E21_Person ?person ;"+
"crm:E62_String ?type ;"+
"crm:P82_at_some_time_within ?year;"+
"crm:P33_used_specific_technique ?material;}";
Query query = QueryFactory.create(spr);
Model model = ModelFactory.createDefaultModel();
File f = new File("J:/Museum/data.rdf");
model.read(new FileInputStream(f), "RDF/XML");
//model.write(System.out, "TTL");
final QueryExecution exec = QueryExecutionFactory.create(query, model);
//ResultSetFormatter.out(System.out, exec.execSelect(), query);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
// IMPORTANT: Save the old System.out!
PrintStream old = System.out;
// Tell Java to use your special stream
System.setOut(ps);
// Print some output: goes to your special stream
ResultSetFormatter.outputAsJSON(System.out, exec.execSelect());
// Put things back
System.out.flush();
System.setOut(old);
// Show what happened
// return baos.toString();
String gcr=baos.toString();
return gcr;
}
}
これは、ブラウザに出力を表示するサーブレットコードです。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out= response.getWriter();
String rec=MuseumData.getrec();
out.print(rec);
}
Com/hp/hpl/jena/query/QueryFactoryの.jarを見つけて、.warファイルのWEB-INFlibに配置します。
EclipseIDEでサーブレットを開発している場合の方法は次のとおりです。
クラスパスにクラスcom.hp.hpl.jena.query.QueryFactory
を含むjar
ファイルがありません。パッケージ/クラスパスに追加してください
Tomcatホームライブラリとweb-infライブラリにojdbc6.jarを追加した後、問題が解決されました。
HTTPステータス500-サーブレットの実行で例外がスローされました
同じサーブレット例外エラーが発生していたので..Tomcat6から8にアップグレードしている間。
Tomcatホームライブラリとweb-infライブラリにodbc6.jarを追加した後、問題は解決されました。