Skip to content
This repository has been archived by the owner on Apr 9, 2020. It is now read-only.

SPARQL ASK in RepositoryController #70

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,10 @@
*******************************************************************************/
package org.eclipse.rdf4j.http.server.repository;

import java.io.ByteArrayInputStream;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
Expand All @@ -28,32 +24,26 @@
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import org.apache.http.HttpStatus;
import org.apache.http.util.ByteArrayBuffer;
import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
import static javax.servlet.http.HttpServletResponse.SC_SERVICE_UNAVAILABLE;
import org.eclipse.rdf4j.RDF4JException;
import org.eclipse.rdf4j.common.lang.FileFormat;
import org.eclipse.rdf4j.common.lang.service.FileFormatServiceRegistry;
import org.eclipse.rdf4j.http.protocol.Protocol;
import org.eclipse.rdf4j.http.server.ClientHTTPException;
import org.eclipse.rdf4j.http.server.HTTPException;
import org.eclipse.rdf4j.http.server.ServerHTTPException;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Model;
import org.eclipse.rdf4j.model.ValueFactory;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.RepositoryException;
import org.eclipse.rdf4j.query.BooleanQuery;
import org.eclipse.rdf4j.query.Query;
import org.eclipse.rdf4j.query.QueryEvaluationException;
import org.eclipse.rdf4j.query.QueryInterruptedException;
import org.eclipse.rdf4j.query.QueryLanguage;
import org.eclipse.rdf4j.query.resultio.BooleanQueryResultWriterRegistry;
import org.eclipse.rdf4j.repository.config.ConfigTemplate;
import org.eclipse.rdf4j.repository.config.RepositoryConfig;
import org.eclipse.rdf4j.repository.config.RepositoryConfigUtil;

import org.eclipse.rdf4j.repository.manager.RepositoryManager;
import org.eclipse.rdf4j.repository.manager.SystemRepository;
import org.eclipse.rdf4j.rio.RDFFormat;
import org.eclipse.rdf4j.rio.RDFParseException;
import org.eclipse.rdf4j.rio.Rio;
import org.eclipse.rdf4j.rio.UnsupportedRDFormatException;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
Expand All @@ -74,6 +64,7 @@ public class RepositoryController {

@Reference
private RepositoryManager repositoryManager;


public RepositoryController() {
System.out.println("Init RepositoryController");
Expand All @@ -82,16 +73,43 @@ public RepositoryController() {
@GET
@Path("/repositories/{repId}")
@Produces({"application/json", "application/sparql-results+json"})
public boolean get(@Context UriInfo uriInfo, @PathParam("repId") String repId,
@QueryParam("query") String query, @QueryParam("queryLn") String queryLn,
public Query get(@Context UriInfo uriInfo, @PathParam("repId") String repId,
@QueryParam("query") Query query, @QueryParam("queryLn") QueryLanguage queryLn,
@QueryParam("queryLn") String infer, @QueryParam("queryLn") String timeout,
@QueryParam("queryLn") String distinct, @QueryParam("queryLn") String limit,
@QueryParam("queryLn") String offset) throws WebApplicationException {
@QueryParam("queryLn") boolean distinct, @QueryParam("queryLn") long limit,
@QueryParam("queryLn") long offset) throws WebApplicationException, IOException, HTTPException {
System.out.println("RepositoryController.get");
System.out.println("repId=" + repId);
System.out.println("query=" + query);

return true;
boolean headersOnly = false;
Object queryResult = null;
FileFormatServiceRegistry<? extends FileFormat, ?> registry;

try {
if (query instanceof BooleanQuery) {
BooleanQuery bQuery = (BooleanQuery) query;
queryResult = headersOnly ? null : bQuery.evaluate();
registry = BooleanQueryResultWriterRegistry.getInstance();
}
else {
throw new ClientHTTPException(SC_BAD_REQUEST,
"Unsupported query type: " + query.getClass().getName());
}
}
catch (QueryInterruptedException e) {
throw new ServerHTTPException(SC_SERVICE_UNAVAILABLE, "Query evaluation took too long");
}
catch (QueryEvaluationException e) {
if (e.getCause() != null && e.getCause() instanceof HTTPException) {
throw (HTTPException) e.getCause();
}
else {
throw new ServerHTTPException("Query evaluation error: " + e.getMessage());
}
}

return (Query) queryResult;
}


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
package com.example.myproject.test;

import static org.junit.Assert.*;
import static org.ops4j.pax.exam.CoreOptions.*;

import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;

import jdk.nashorn.internal.ir.annotations.Reference;
import shaded.org.apache.commons.io.IOUtils;

import org.eclipse.rdf4j.http.server.repository.RepositoryConfigController;
import org.eclipse.rdf4j.http.server.repository.RepositoryController;
import org.eclipse.rdf4j.http.server.transaction.ActiveTransactionRegistry;
import org.eclipse.rdf4j.http.server.transaction.TransactionQuery;
import org.eclipse.rdf4j.model.Model;
import org.eclipse.rdf4j.model.util.ModelBuilder;
import org.eclipse.rdf4j.model.vocabulary.FOAF;
import org.eclipse.rdf4j.model.vocabulary.RDF;
import org.eclipse.rdf4j.query.Update;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.RepositoryException;
import org.eclipse.rdf4j.repository.config.ConfigTemplate;
import org.eclipse.rdf4j.repository.config.RepositoryConfig;
import org.eclipse.rdf4j.repository.manager.RepositoryManager;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Configuration;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.karaf.options.LogLevelOption;
import org.ops4j.pax.exam.options.MavenArtifactUrlReference;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.features;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Vector;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;

import org.apache.karaf.itests.KarafTestSupport;
import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.*;


@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
public class olegger_test extends KarafTestSupport {

//@Inject
//private RepositoryManager manager;

@Override
@Configuration
public Option[] config() {
MavenArtifactUrlReference karafUrl = maven().groupId("org.apache.karaf").artifactId("apache-karaf").versionAsInProject().type("tar.gz");

String httpPort = "8181";
String rmiRegistryPort = Integer.toString(getAvailablePort(Integer.parseInt(MIN_RMI_REG_PORT), Integer.parseInt(MAX_RMI_REG_PORT)));
String rmiServerPort = Integer.toString(getAvailablePort(Integer.parseInt(MIN_RMI_SERVER_PORT), Integer.parseInt(MAX_RMI_SERVER_PORT)));
String sshPort = Integer.toString(getAvailablePort(Integer.parseInt(MIN_SSH_PORT), Integer.parseInt(MAX_SSH_PORT)));
String localRepository = System.getProperty("org.ops4j.pax.url.mvn.localRepository");
if (localRepository == null) {
localRepository = "";
}

return new Option[] {
//KarafDistributionOption.debugConfiguration("8889", true),
karafDistributionConfiguration().frameworkUrl(karafUrl).name("Apache Karaf").unpackDirectory(new File("target/exam")),
// enable JMX RBAC security, thanks to the KarafMBeanServerBuilder
configureSecurity().disableKarafMBeanServerBuilder(),
keepRuntimeFolder(),
logLevel(LogLevelOption.LogLevel.INFO),
mavenBundle().groupId("org.awaitility").artifactId("awaitility").versionAsInProject(),
mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.hamcrest").versionAsInProject(),
mavenBundle().groupId("org.apache.karaf.itests").artifactId("common").versionAsInProject(),
features(maven().groupId("ru.agentlab.rdf4j.server")
.artifactId("ru.agentlab.rdf4j.server.features").type("xml")
.version("0.0.1-SNAPSHOT"), "org.eclipse.rdf4j.jaxrs"),
junitBundles(),
editConfigurationFilePut("etc/org.ops4j.pax.web.cfg", "org.osgi.service.http.port", httpPort),
editConfigurationFilePut("etc/org.apache.karaf.management.cfg", "rmiRegistryPort", rmiRegistryPort),
editConfigurationFilePut("etc/org.apache.karaf.management.cfg", "rmiServerPort", rmiServerPort),
editConfigurationFilePut("etc/org.apache.karaf.shell.cfg", "sshPort", sshPort),
editConfigurationFilePut("etc/org.ops4j.pax.url.mvn.cfg", "org.ops4j.pax.url.mvn.localRepository", localRepository)
};
}


@Test
public void getQueryTest1() throws Exception {

URL url = new URL("http://localhost:8181/rdf4j2-server/repositories/rpotest?query=ask%20{?s%20?p%20?o}");
URLConnection conn = url.openConnection();
InputStream inputStream = conn.getInputStream();

StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, "UTF-8");
String line = writer.toString();

if (line.contains("false")) {
fail("Запрос не выполнен");
}

}

@Test
public void getQueryTest2() throws Exception {

URL url = new URL("http://localhost:8181/rdf4j2-server/repositories/rpotest?query=ask%20{?s%20?p%20?o}");
URLConnection conn = url.openConnection();
InputStream inputStream = conn.getInputStream();

StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, "UTF-8");
String line = writer.toString();

if (line.contains("true")) {
fail("Запрос выполнен, но не должен был");
}
}
}