Skip to content

Commit 8d33cbd

Browse files
committed
Ensure the OWL import path mappings are provided as legal file locations
1 parent 4917481 commit 8d33cbd

File tree

1 file changed

+5
-30
lines changed

1 file changed

+5
-30
lines changed

shaclvalidator-common/src/main/java/eu/europa/ec/itb/shacl/DomainConfigCache.java

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@
2323
import jakarta.annotation.PostConstruct;
2424
import org.apache.commons.configuration2.Configuration;
2525
import org.apache.commons.lang3.StringUtils;
26-
import org.apache.commons.lang3.tuple.Pair;
2726
import org.slf4j.Logger;
2827
import org.slf4j.LoggerFactory;
2928
import org.springframework.beans.factory.annotation.Autowired;
3029
import org.springframework.stereotype.Component;
3130

32-
import java.nio.file.Files;
33-
import java.nio.file.Path;
34-
import java.util.*;
31+
import java.util.Arrays;
32+
import java.util.HashSet;
33+
import java.util.Map;
34+
import java.util.Objects;
3535

3636
import static eu.europa.ec.itb.validation.commons.config.ParseUtils.*;
3737

@@ -114,32 +114,7 @@ protected void addDomainConfiguration(DomainConfig domainConfig, Configuration c
114114
// Check how to react to owl:import failures - end
115115
addMissingDefaultValues(domainConfig.getWebServiceDescription(), appConfig.getDefaultLabels());
116116
// Local mapping files for URIs used in owl:imports - start
117-
List<Pair<String, Path>> mappingList = ParseUtils.parseValueList("validator.owlImportMapping", config, (entry) -> {
118-
String uri = entry.get("uri");
119-
String file = entry.get("file");
120-
if (StringUtils.isNotBlank(uri) && StringUtils.isNotBlank(file)) {
121-
uri = uri.trim();
122-
if (!uri.toLowerCase().startsWith("http://") && !uri.toLowerCase().startsWith("https://")) {
123-
throw new IllegalStateException("OWL import mapping for URI [%s] does not start with 'http://' or 'https://'".formatted(uri));
124-
}
125-
file = file.trim();
126-
Path resourcePath = Path.of(appConfig.getResourceRoot(), domainConfig.getDomain(), file);
127-
if (!Files.exists(resourcePath)) {
128-
throw new IllegalStateException("OWL import mapping for URI [%s] points to a non-existent file [%s]".formatted(uri, file));
129-
}
130-
return Pair.of(uri, resourcePath);
131-
} else {
132-
throw new IllegalStateException("Invalid mappings for owl:import. Each element must include [uri] and [file] properties");
133-
}
134-
});
135-
Map<String, Path> mappingMap = new HashMap<>();
136-
mappingList.forEach(entry -> {
137-
if (mappingMap.containsKey(entry.getKey())) {
138-
throw new IllegalStateException("Invalid mappings for owl:import. URI [%s] defined multiple times".formatted(entry.getKey()));
139-
}
140-
mappingMap.put(entry.getKey(), entry.getValue());
141-
});
142-
domainConfig.setOwlImportMappings(mappingMap);
117+
domainConfig.setOwlImportMappings(ParseUtils.parseFileMap("validator.owlImportMapping", config, "OWL mapping", appConfig, domainConfig));
143118
// Local mapping files for URIs used in owl:imports - end
144119
// Preload imports and SHACL shape graphs - start
145120
Boolean defaultPreloadOwlImports = config.getBoolean("validator.preloadOwlImports", null);

0 commit comments

Comments
 (0)