2016-07-25 91 views
0

我们有一个调用Virtuoso的Java应用程序。如果它在Virtuoso执行检查点时运行一些SPARQL查询,它会给出:"com.hp.hpl.jena.sparql.engine.http.QueryExceptionHTTP: File not found"为什么我会在Virtuoso检查点获得`404 File not found`(通过Jena)?

我的第一个想法是因为CheckpointSyncMode=2,它阻止了查询。但是当CheckpointSyncMode=1时我设法得到这个例外。

不幸的是,我不能复制比方法调用更多的代码;但我可以用任何SPARQL查询重现它。

ResponseResult resultsAndBindings = APIEndpointUtil.call(req, nb, match, contextPath, queryParams); 

这里是堆栈跟踪:

HttpException: 404 File not found 
at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execCommon(HttpQuery.java:446) 
at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execPost(HttpQuery.java:344) 
at com.hp.hpl.jena.sparql.engine.http.HttpQuery.exec(HttpQuery.java:239) 
at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execSelect(QueryEngineHTTP.java:302) 
at com.epimorphics.lda.sources.SourceBase.executeSelect(SourceBase.java:110) 
at com.epimorphics.lda.query.APIQuery.requestTotalCount(APIQuery.java:917) 
at com.epimorphics.lda.core.APIEndpointImpl.call_revised(APIEndpointImpl.java:112) 
at com.epimorphics.lda.core.APIEndpointImpl.call(APIEndpointImpl.java:92) 
at com.epimorphics.lda.core.APIEndpointUtil.call(APIEndpointUtil.java:53) 

再现一个非常简单的测试环境:

我建立了一个空的Virtuoso例如:

OpenLink Virtuoso Server 
Version 07.20.3215-pthreads for Linux as of Jan 20 2016" 

CheckpointSyncMode=2CheckpointSyncMode=1没有按没关系;无论如何它都会发生。

确保炫技忙于检查点:

#!/bin/bash 

while true; do 
    isql-vt 1111 dba dba exec="checkpoint;" 
done; 

呼叫与耶拿(附:com.epimorphics.lda:elda-lda:1.3.16jena-core:2.10.1):端点

import com.hp.hpl.jena.query.ParameterizedSparqlString; 
import com.hp.hpl.jena.query.QueryExecution; 
import com.hp.hpl.jena.query.QueryExecutionFactory; 
import com.hp.hpl.jena.query.QuerySolution; 

public class Main { 

    public static void main(String args[]){ 

     while(true) 
      getPreviousSnapshot(); 
    } 

    public static void getPreviousSnapshot() { 

     ParameterizedSparqlString pss = new ParameterizedSparqlString("SELECT DISTINCT ?g WHERE { GRAPH ?g { ?s ?p ?o }}"); 

     System.out.println("Executing SPARQL query:" + pss.toString()); 

     QueryExecution qe = QueryExecutionFactory.sparqlService("http://33.33.33.11:8890/sparql", pss.asQuery()); 
     com.hp.hpl.jena.query.ResultSet resultSet = qe.execSelect(); 

     processResultSet(resultSet); 
     qe.close(); 

    } 

    private static void processResultSet(com.hp.hpl.jena.query.ResultSet results) { 

     while (results.hasNext()) { 
      QuerySolution qs = results.next(); 
      String s = qs.getResource("g").toString(); 
      System.out.println(s); 

     } 
    } 
} 

输出:

Executing SPARQL query:SELECT DISTINCT ?g WHERE { GRAPH ?g { ?s ?p ?o }} 
http://www.openlinksw.com/schemas/virtrdf# 
http://www.w3.org/ns/ldp# 
http://localhost:8890/sparql 
http://localhost:8890/DAV/ 
http://www.w3.org/2002/07/owl# 
Executing SPARQL query:SELECT DISTINCT ?g WHERE { GRAPH ?g { ?s ?p ?o }} 
Exception in thread "main" HttpException: 404 File not found 
    at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execCommon(HttpQuery.java:446) 
    at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execGet(HttpQuery.java:289) 
    at com.hp.hpl.jena.sparql.engine.http.HttpQuery.exec(HttpQuery.java:240) 
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execSelect(QueryEngineHTTP.java:302) 
    at Main.getPreviousSnapshot(Main.java:21) 
    at Main.main(Main.java:11) 
+0

没有看到你所说的整个代码和错误堆栈跟踪,无法帮助... – AKSW

+0

感谢您的反馈,更新了问题。 –

+0

错误说“HttpException:404 File not found”;我猜你已经得到了错误的端点URI。没有更多的代码,不可能说。 –

回答

0

根据我在virtuoso邮件列表上得到的答案是:Jena没有任何联系到Virtuoso由于执行检查点(这是Virtuoso中的一个原子操作)而暂时无法访问,因此仅返回404错误,因此无法访问SPARQL服务。

相关问题