2013-10-18 28 views
1

我正在使用Jena API從Allegrograph Server獲取RDF數據。我已經使用Jersey jar編寫了一個REST web服務來獲取這些數據。Jena API和使用澤西島的REST webservice

我對web服務的Java代碼如下所示:

@GET 
@Path("/JENA") 
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
public String getData() throws RepositoryException { 
    AGGraphMaker maker = new AGGraphMaker(conn); 
    AGGraph graph = maker.getGraph(); 
    AGModel model = new AGModel(graph); 
    AGQuery agQuery = AGQueryFactory.create(query); 
    QueryExecution qe = AGQueryExecutionFactory.create(agQuery, model); 

    String result = null; 

    ByteArrayOutputStream byteArrayOutputStream = null; 

try { 
     ResultSet rs = qe.execSelect(); 
     While(rs.hasNext()){ 
     byteArrayOutputStream = new ByteArrayOutputStream(); 
     if("JSON".equalsIgnoreCase(outputFormat)){ 
      ResultSetFormatter.outputAsJSON(byteArrayOutputStream, rs); 
      result = byteArrayOutputStream.toString(); 
      System.out.println("Result is "+result); 
     } else if("XML".equalsIgnoreCase(outputFormat)){ 
      ResultSetFormatter.outputAsXML(byteArrayOutputStream, rs); 
      result = byteArrayOutputStream.toString(); 
     }else if("CSV".equalsIgnoreCase(outputFormat)){ 
      ResultSetFormatter.outputAsCSV(byteArrayOutputStream, rs); 
      result = byteArrayOutputStream.toString(); 
     } 
    } 
} catch (Exception e) { 
    System.out.println(e.getMessage()); 
} 
} 

我沒有得到任何結果SPARQL查詢,當我部署Tomcat服務器上這個Web服務,並使用在Chrome和Firefox的REST客戶端應用程序進行測試。

但是相同的代碼(在webservice代碼和這個主要方法代碼中完全沒有區別)如果我在普通的java類中編寫並運行它的主要方法,我得到36個結果。我不確定問題是什麼。

請在這方面幫助我。

回答

0

你需要單獨的擔憂:

  1. 移動業務邏輯 - 即實際查詢快板圖位 - 到一個單獨的類,以便它的正確封裝。該類的API應該反映它在你的應用程序中的責任,而不是它現在正在工作的方式。
  2. 編寫服務類的JUnit測試。這一點很重要 - 它可以讓你確信你的服務正確地執行其工作,並且在開發應用程序時一直這樣做。
  3. 編寫您的Jersey方法來調用符合您的服務類的API的任何服務對象。
  4. 編寫一個或多個HTTPUnit(或類似的)測試來調用您的REST API。理想情況下,您將使用模擬或測試加倍而不是實際服務。你想要測試的是HTTP請求是否達到正確的方法,並且該方法使用正確的參數委託給服務對象。然後,您正在測試(並調試!)較少的問題。

使用小功能單元和明確瞭解他們的職責是什麼更好。而且你絕對應該學習如何進行測試 - 這在中期是一個很大的勝利,即使它意味着更多的學習前沿!