Skip to content

Commit a858d39

Browse files
authored
GH-5828: refine FedXConnection interface contract for exceptions (#5862)
2 parents 4278167 + 7cf523d commit a858d39

2 files changed

Lines changed: 32 additions & 21 deletions

File tree

tools/federation/src/main/java/org/eclipse/rdf4j/federated/FedXConnection.java

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -297,12 +297,19 @@ protected CloseableIteration<? extends Namespace> getNamespacesInternal() throws
297297
protected CloseableIteration<? extends Statement> getStatementsInternal(Resource subj, IRI pred,
298298
Value obj, boolean includeInferred, Resource... contexts) throws SailException {
299299

300-
Dataset dataset = new SimpleDataset();
301-
FederationEvaluationStrategy strategy = federationContext.createStrategy(dataset);
302-
QueryInfo queryInfo = new QueryInfo(subj, pred, obj, 0, includeInferred, federationContext, strategy,
303-
dataset);
304-
federationContext.getMonitoringService().monitorQuery(queryInfo);
305-
return strategy.getStatements(queryInfo, subj, pred, obj, contexts);
300+
try {
301+
Dataset dataset = new SimpleDataset();
302+
FederationEvaluationStrategy strategy = federationContext.createStrategy(dataset);
303+
QueryInfo queryInfo = new QueryInfo(subj, pred, obj, 0, includeInferred, federationContext, strategy,
304+
dataset);
305+
federationContext.getMonitoringService().monitorQuery(queryInfo);
306+
return strategy.getStatements(queryInfo, subj, pred, obj, contexts);
307+
} catch (Exception e) {
308+
if (e instanceof SailException se) {
309+
throw se;
310+
}
311+
throw new SailException(e);
312+
}
306313
}
307314

308315
@Override
@@ -316,9 +323,10 @@ protected boolean hasStatementInternal(Resource subj, IRI pred, Value obj, boole
316323
federationContext.getMonitoringService().monitorQuery(queryInfo);
317324
return strategy.hasStatements(queryInfo, subj, pred, obj, contexts);
318325

319-
} catch (RuntimeException e) {
320-
throw e;
321326
} catch (Exception e) {
327+
if (e instanceof SailException se) {
328+
throw se;
329+
}
322330
if (e instanceof InterruptedException) {
323331
Thread.currentThread().interrupt();
324332
}
@@ -330,7 +338,10 @@ protected boolean hasStatementInternal(Resource subj, IRI pred, Value obj, boole
330338
protected void addStatementInternal(Resource subj, IRI pred, Value obj, Resource... contexts) throws SailException {
331339
try {
332340
getWriteStrategyInternal().addStatement(subj, pred, obj, contexts);
333-
} catch (RepositoryException e) {
341+
} catch (Exception e) {
342+
if (e instanceof SailException se) {
343+
throw se;
344+
}
334345
throw new SailException(e);
335346
}
336347
}

tools/federation/src/test/java/org/eclipse/rdf4j/federated/write/WriteTest.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -86,19 +86,19 @@ public void testReadOnlyFederation() throws Exception {
8686

8787
Assertions.assertEquals(false, fedxRule.getRepository().isWritable());
8888

89-
Assertions.assertThrows(UnsupportedOperationException.class, () -> {
90-
Statement st = simpleStatement();
91-
try (RepositoryConnection conn = fedxRule.getRepository().getConnection()) {
92-
try {
93-
conn.add(st);
94-
} catch (RuntimeException e) {
95-
// rollback to avoid a stack trace in the output
96-
conn.rollback();
97-
throw e;
98-
}
89+
Statement st = simpleStatement();
90+
try (RepositoryConnection conn = fedxRule.getRepository().getConnection()) {
91+
try {
92+
conn.add(st);
93+
} catch (RepositoryException e) {
94+
// rollback to avoid a stack trace in the output
95+
conn.rollback();
96+
97+
Assertions.assertTrue(e.getMessage()
98+
.contains(
99+
"java.lang.UnsupportedOperationException: Writing not supported to a federation: the federation is readonly."));
99100
}
100-
});
101-
101+
}
102102
}
103103

104104
@Test

0 commit comments

Comments
 (0)