web-dev-qa-db-ja.com

HTTPステータス500-サーブレットの実行で例外がスローされました

サーブレットで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);


}
3
Ravi Vyas

Com/hp/hpl/jena/query/QueryFactoryの.jarを見つけて、.warファイルのWEB-INFlibに配置します。

EclipseIDEでサーブレットを開発している場合の方法は次のとおりです。

4
FoggyDay

クラスパスにクラスcom.hp.hpl.jena.query.QueryFactoryを含むjarファイルがありません。パッケージ/クラスパスに追加してください

1
Keerthivasan

Tomcatホームライブラリとweb-infライブラリにojdbc6.jarを追加した後、問題が解決されました。

HTTPステータス500-サーブレットの実行で例外がスローされました

同じサーブレット例外エラーが発生していたので..Tomcat6から8にアップグレードしている間。

Tomcatホームライブラリとweb-infライブラリにodbc6.jarを追加した後、問題は解決されました。

0
Sujay