Jena API与使用Jersey的REST webservice

Jena API与使用Jersey的REST webservice,rest,tomcat,jersey,jena,Rest,Tomcat,Jersey,Jena,我正在使用Jena API从Allegrograph服务器获取RDF数据。我已经使用Jersey jar编写了一个REST Web服务来获取这些数据 我的Web服务java代码如下所示: @GET @Path("/JENA") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public String getData() throws RepositoryException { AGGraphMak

我正在使用Jena API从Allegrograph服务器获取RDF数据。我已经使用Jersey jar编写了一个REST Web服务来获取这些数据

我的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());
}
 } 
当我在Tomcat服务器上部署此web服务并在Chrome和firefox上使用REST客户端应用程序对其进行测试时,SPARQL查询没有得到任何结果

但是相同的代码在webservice代码和这个主方法代码中绝对没有区别。如果我在一个普通的java类中编写并运行它的主方法,我会得到36个结果。我不确定是什么问题


请在这方面帮助我。

您需要将关注点分开:

将服务逻辑(实际查询Allegro graph的位)移动到一个单独的类中,以便正确封装它。类的API应该反映它在应用程序中的职责,而不是它目前的工作方式。 为服务类编写JUnit测试。这一点很重要—它使您确信您的服务正在正确地执行其工作,并在您开发应用程序时继续这样做。 编写Jersey方法来调用符合服务类API的任何服务对象。 编写一个或多个HTTPUnit或类似的测试来调用RESTAPI。理想情况下,您将使用模拟或双重测试,而不是实际的服务。您要测试的是HTTP请求是否到达了正确的方法,并且该方法使用正确的参数委托给服务对象。然后您将进行测试和调试!关注的问题较少。 使用小型功能单元时,最好清楚地了解它们的职责。而且你一定要学会应付考试——这是中期的一大胜利,即使这意味着提前多学一点