web-dev-qa-db-fra.com

HTTP Status 500 - L'exécution du servlet a généré une exception

Je reçois cette erreur en appelant une classe Java dans servlet.

Voici l'erreur.

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.

Voici un code de ma classe Java qui obtiendra l’enregistrement d’un fichier RDF à l’aide de SPARQL et renverra la sortie au format JSON dans la console. Par conséquent, je pourrais utiliser cette chaîne dans la servlet.

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;

        }

}

Voici un code de servlet qui affichera la sortie dans un navigateur.

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

Recherchez le fichier .jar correspondant à com/hp/hpl/jena/query/QueryFactory et placez-le dans la bibliothèque WEB-INF dans votre fichier .war.

Voici comment procéder si vous développez vos servlets dans l'IDE Eclipse:

4
FoggyDay

Vous avez manqué le fichier jar contenant la classe com.hp.hpl.jena.query.QueryFactory dans votre chemin de classe. S'il vous plaît ajoutez-le dans votre paquet/classpath

1
Keerthivasan

Le problème a été résolu après l'ajout de ojdbc6.jar dans les librairies locales Tomcat et lib Web-inf.

HTTP Status 500 - L'exécution du servlet a généré une exception

Comme je recevais la même erreur d’exception de servlet .. Lors de la mise à niveau de Tomcat 6 à 8.

Le problème a été résolu après l'ajout de odbc6.jar dans les librairies locales Tomcat et lib Web-inf.

0
Sujay