Skip to content

Commit e2f6012

Browse files
author
James Leigh
authored
Merge pull request #813 from jamesrdf/issues/#812-service-strategy
Fix #812: Pass service resolver from store to eval strategy factory
2 parents 180ebb3 + a56683b commit e2f6012

4 files changed

Lines changed: 45 additions & 6 deletions

File tree

compliance/store/src/test/java/org/eclipse/rdf4j/repository/sparql/SPARQLServiceEvaluationTest.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,21 @@
2626
import org.eclipse.rdf4j.query.QueryLanguage;
2727
import org.eclipse.rdf4j.query.TupleQuery;
2828
import org.eclipse.rdf4j.query.TupleQueryResult;
29+
import org.eclipse.rdf4j.query.algebra.evaluation.EvaluationStrategy;
30+
import org.eclipse.rdf4j.query.algebra.evaluation.federation.FederatedServiceResolverImpl;
31+
import org.eclipse.rdf4j.query.algebra.evaluation.impl.StrictEvaluationStrategyFactory;
2932
import org.eclipse.rdf4j.repository.Repository;
3033
import org.eclipse.rdf4j.repository.RepositoryConnection;
3134
import org.eclipse.rdf4j.repository.RepositoryException;
3235
import org.eclipse.rdf4j.repository.http.HTTPMemServer;
3336
import org.eclipse.rdf4j.repository.http.HTTPRepository;
3437
import org.eclipse.rdf4j.repository.sail.SailRepository;
35-
import org.eclipse.rdf4j.rio.RDFFormat;
3638
import org.eclipse.rdf4j.rio.RDFParseException;
3739
import org.eclipse.rdf4j.rio.Rio;
40+
import org.eclipse.rdf4j.sail.Sail;
3841
import org.eclipse.rdf4j.sail.memory.MemoryStore;
42+
import org.eclipse.rdf4j.sail.memory.config.MemoryStoreConfig;
43+
import org.eclipse.rdf4j.sail.memory.config.MemoryStoreFactory;
3944
import org.junit.After;
4045
import org.junit.AfterClass;
4146
import org.junit.Before;
@@ -100,6 +105,12 @@ public void setUp()
100105
localRepository = new SailRepository(new MemoryStore());
101106
localRepository.initialize();
102107

108+
prepareLocalRepository();
109+
}
110+
111+
private void prepareLocalRepository()
112+
throws IOException
113+
{
103114
loadDataSet(localRepository, "/testdata-query/defaultgraph.ttl");
104115

105116
f = localRepository.getValueFactory();
@@ -199,4 +210,23 @@ else if (alice.equals(x)) {
199210
conn.close();
200211
}
201212
}
213+
214+
/**
215+
* The provided FederatedServiceResolver should finds it way to the {@link EvaluationStrategy}
216+
*/
217+
@Test
218+
public void testRepositoryConfigurationSetup()
219+
throws Exception
220+
{
221+
tearDown();
222+
MemoryStoreFactory factory = new MemoryStoreFactory();
223+
MemoryStoreConfig config = new MemoryStoreConfig();
224+
config.setEvaluationStrategyFactoryClassName(StrictEvaluationStrategyFactory.class.getName());
225+
Sail sail = factory.getSail(config);
226+
localRepository = new SailRepository(sail);
227+
localRepository.setFederatedServiceResolver(new FederatedServiceResolverImpl());
228+
localRepository.initialize();
229+
prepareLocalRepository();
230+
testSimpleServiceQuery();
231+
}
202232
}

core/http/client/src/main/java/org/eclipse/rdf4j/http/client/SPARQLProtocolSession.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1144,9 +1144,12 @@ else if (errInfo.getErrorType() == ErrorType.MALFORMED_QUERY) {
11441144
else if (errInfo.getErrorType() == ErrorType.UNSUPPORTED_QUERY_LANGUAGE) {
11451145
throw new UnsupportedQueryLanguageException(errInfo.getErrorMessage());
11461146
}
1147-
else {
1147+
else if (errInfo.toString().length() > 0){
11481148
throw new RepositoryException(errInfo.toString());
11491149
}
1150+
else {
1151+
throw new RepositoryException(response.getStatusLine().getReasonPhrase());
1152+
}
11501153
}
11511154
}
11521155
}

core/sail/memory/src/main/java/org/eclipse/rdf4j/sail/memory/MemoryStore.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ public synchronized FederatedServiceResolver getFederatedServiceResolver() {
214214
if (dependentServiceResolver == null) {
215215
dependentServiceResolver = new FederatedServiceResolverImpl();
216216
}
217-
return serviceResolver = dependentServiceResolver;
217+
setFederatedServiceResolver(dependentServiceResolver);
218218
}
219219
return serviceResolver;
220220
}
@@ -226,8 +226,11 @@ public synchronized FederatedServiceResolver getFederatedServiceResolver() {
226226
* @param reslover
227227
* The SERVICE resolver to set.
228228
*/
229-
public synchronized void setFederatedServiceResolver(FederatedServiceResolver reslover) {
230-
this.serviceResolver = reslover;
229+
public synchronized void setFederatedServiceResolver(FederatedServiceResolver resolver) {
230+
this.serviceResolver = resolver;
231+
if (resolver != null && evalStratFactory instanceof FederatedServiceResolverClient) {
232+
((FederatedServiceResolverClient)evalStratFactory).setFederatedServiceResolver(resolver);
233+
}
231234
}
232235

233236
/**

core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/NativeStore.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ public synchronized FederatedServiceResolver getFederatedServiceResolver() {
199199
if (dependentServiceResolver == null) {
200200
dependentServiceResolver = new FederatedServiceResolverImpl();
201201
}
202-
return serviceResolver = dependentServiceResolver;
202+
setFederatedServiceResolver(dependentServiceResolver);
203203
}
204204
return serviceResolver;
205205
}
@@ -213,6 +213,9 @@ public synchronized FederatedServiceResolver getFederatedServiceResolver() {
213213
*/
214214
public synchronized void setFederatedServiceResolver(FederatedServiceResolver resolver) {
215215
this.serviceResolver = resolver;
216+
if (resolver != null && evalStratFactory instanceof FederatedServiceResolverClient) {
217+
((FederatedServiceResolverClient)evalStratFactory).setFederatedServiceResolver(resolver);
218+
}
216219
}
217220

218221
/**

0 commit comments

Comments
 (0)