2011-11-22 4 views
1

Когда я пытаюсь вызвать Jena с помощью AJAX в моем сервлета я получаю эту ошибку:ошибка Аякса и Jena

java.lang.ClassNotFoundException: com.hp.hpl.jena.sparql.core.Prologue 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361) 
at fr.objective.blogomatic.semantic.web.ServletAjax.doGet(ServletAjax.java:40) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
at java.lang.Thread.run(Unknown Source) 

Это мой Jena код:

class classUsingJena { 
public void execute(){ 

String queryString = PREFIXES 
         + " Select ?label " 
         + " where {" 
         + " ?description j.5:entity-label ?label ."      + " } "; 

Query query = QueryFactory.create(queryString); 
QueryExecution qe = QueryExecutionFactory.create(query, model); 
ResultSet results = qe.execSelect(); 
ResultSetFormatter.out(System.out,results, query); 
qe.close();} 
} 

Это работает отлично, но когда я вызовите эту функцию с помощью сервлета. Я получаю ошибку, описанную ранее.

Это мой сервлет код:

@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 
    String service = req.getParameter("service"); 
      classUsingJena jena= new classUsingJena() //bug 
    return;} 
@Override 
protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 
    doGet(req, resp); 
} 

@Override 
public void init() throws ServletException { 
    ServletConfig config = getServletConfig(); 
    urlAjax = config.getInitParameter("urlAjax"); 
} 

Мой Java код сценария, который работает отлично:

$("#Analyser").click(function(){ 

     var article = $("#TxtArea").val(); 
     ajaxFunction("acteur",article); 

     console.log(article); 
    }); 
function getXMLObject() //XML OBJECT 
{ 
    var xmlHttp = false; 
    try { 
     xmlHttp = new ActiveXObject("Msxml2.XMLHTTP") // For Old Microsoft Browsers 
     } 
    catch (e) { 
     try { 
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP") // For Microsoft IE 6.0+ 
      } 
    catch (e2) { 
     xmlHttp = false // No Browser accepts the XMLHTTP Object then false 
     } 
    } 

    if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { 
     xmlHttp = new XMLHttpRequest();  //For Mozilla, Opera Browsers 
    } 
    return xmlHttp; // Mandatory Statement returning the ajax object created 
} 

var xmlhttp = new getXMLObject(); //xmlhttp holds the ajax object 



function ajaxFunction(valeur,txt) { 

    if(xmlhttp) { 
     xmlhttp.open("GET","ajax?service=ajax&valeur="+valeur+"&text="+txt,true); 
     xmlhttp.onreadystatechange = handleServerResponse; 
     xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
     xmlhttp.send(null); 
     } 
} 



function handleServerResponse() { 

    if (xmlhttp.readyState == 4) { 
     if(xmlhttp.status == 200) { 
      $("#J").text(""); 
      parseXml(xmlhttp.responseXML); 
     } 
     else { 
      //alert("Error during AJAX call. Please try again"); 
     } 
    } 
} 

function parseXml(xml) 
{ 
    $(xml).find("nom").each(function() 
    { 
    $("#J").append($(this).text() + "<br />"); 
    }); 
} 
+0

Похоже, что вы пропускаете опцию 'public', когда вы объявляете класс. Это просто ошибка в вопросе? – Pointy

+0

это публичный класс, я просто забыл добавить публикацию в этот комментарий, извините. но я решил эту проблему. в pom я объявил старую версию Arq 1.8.7 вместо 2.8.7. Теперь он работает отлично :) – Allel

ответ

1

В ПОМ я объявил старую версию Arq 1.8.7 вместо 2.8. 7. Теперь все работает нормально.

Смежные вопросы