2015-04-15 38 views
1

我想連接到DBpedia使用Apache jena運行sparql查詢。我在代理服務器後面,問題是我使用apache jena連接時遇到了代碼錯誤,但是我可以使用直接url進行連接。 此代碼正在工作。連接到代理服務器後面的DBpedia端點會導致407錯誤?

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.Authenticator; 
import java.net.PasswordAuthentication; 
import java.net.URL; 
import java.net.URLConnection; 

/** 
* 
* @author user 
*/ 
public class NewClass { 
    public static void main(String[] args) throws Exception { 
     System.setProperty("http.proxyHost", "10.25.0.42"); 
    System.setProperty("http.proxyPort", "3128"); 
    Authenticator.setDefault(new Authenticator() 
    { 
    protected PasswordAuthentication getPasswordAuthentication() 
    { 
    return new PasswordAuthentication("asiddh-me-13","*****".toCharArray()); 
    } 
    }); 
     URL oracle = new URL("http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=select++%3Fx+%3Fy+%3Fc+%3Fp%0D%0Awhere%7B%0D%0A%3Fx+dbpedia-owl%3AwikiPageDisambiguates+dbpedia%3ASOAP%3B%0D%0A+dbpedia-owl%3AwikiPageDisambiguates+%3Fy.%0D%0A%3Fy+dbpedia-owl%3Aabstract+%3Fc.%0D%0A%3Fy+dbpedia-owl%3Athumbnail+%3Fp.%0D%0Afilter%28langmatches%28lang%28%3Fc%29%2C%22en%22%29%29%0D%0A%7D&format=text%2Fhtml&timeout=30000&debug=on"); 
     URLConnection yc = oracle.openConnection(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(
            yc.getInputStream())); 
     String inputLine; 
     while ((inputLine = in.readLine()) != null) 
      System.out.println(inputLine); 
     in.close(); 
    } 
} 

但是,當我嘗試連接使用耶拿api它給我錯誤。

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.QuerySolution; 
import com.hp.hpl.jena.query.ResultSet; 
import java.net.Authenticator; 
import java.net.PasswordAuthentication; 


public class Sparqldbpedia { 
    public static void main(String[] args) { 


System.setProperty("http.proxyHost", "10.25.0.42"); 
System.setProperty("http.proxyPort", "3128"); 
Authenticator.setDefault(new Authenticator() 
{ 
protected PasswordAuthentication getPasswordAuthentication() 
{ 
return new PasswordAuthentication("asiddh-me-13","****".toCharArray()); 
} 
}); 


String keyword=""; 
keyword="tank"; 




String sparqlQueryString = "PREFIX p: <http://dbpedia.org/property/>"+ 
"PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>"+ 
"PREFIX dbpedia: <http://dbpedia.org/resource/>"+ 
"PREFIX category: <http://dbpedia.org/resource/Category:>"+ 
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>"+ 
       "select ?x ?y ?c ?p\n" + 
"where{\n" + 
"?x dbpedia-owl:wikiPageDisambiguates dbpedia:"+keyword+ ";\n" + 
" dbpedia-owl:wikiPageDisambiguates ?y.\n" + 
"?y dbpedia-owl:abstract ?c.\n" + 
"?y dbpedia-owl:thumbnail ?p.\n" + 
"filter(langmatches(lang(?c),\"en\"))\n" + 
"}"; 
     Query query = QueryFactory.create(sparqlQueryString); 
    QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query); 

    System.out.println("try block"); 
    try { 
     ResultSet results = qexec.execSelect(); 
     for (; results.hasNext() ;) 
    { 
     QuerySolution soln = results.nextSolution() ; 
     String x = soln.get("?x").toString(); 
     String y = soln.get("?y").toString(); 
     String c = soln.get("?c").toString(); 
     String p = soln.get("?p").toString(); 

     System.out.print(x +"\t"+y+"\t"+c+"\t"+p+"\n"); 
    } 

    }catch(Exception e){System.out.println("catch error"+e.getMessage());} 
    finally { qexec.close() ; } 




} 

}

錯誤是:

HTTP 407 error making the query: Proxy Authentication Required 

回答

0

有一個接受HttpAuthenticator的sparqlService一個版本。也許你可以使用它來處理任何需要的認證?

QueryExecution sparqlService(弦業務,查詢查詢,HttpAuthenticator認證)

創建QueryExecution將 訪問的SPARQL服務通過HTTP

+0

我不知道如何使用,能你告訴我正確的方法? – user1583465

+0

@ user1583465我從來沒有用過它。我只是猜測,因爲你的錯誤是「需要代理身份驗證」,所以名爲「HttpAuthenticator」的對象可能是一個解決方案。雖然這只是一個猜測。 –

相關問題