Bardzo krótka odpowiedź: szukasz swojej nieruchomości w zakresie konkretnej klasy ładującej zamiast klasy docelowej. To powinno działać:
File file = new File(getClass().getResource("jsonschema.json").getFile());
JsonNode mySchema = JsonLoader.fromFile(file);
Zobacz też:
PS Może wystąpić problem, jeśli projekt został skompilowany na jednym komputerze, a następnie został uruchomiony na innym, lub jeśli uruchomisz aplikację w Dockerze. W takim przypadku ścieżki do folderu zasobów mogą być nieprawidłowe. W takim przypadku lepiej byłoby określić ścieżki do zasobów w czasie wykonywania:
ClassPathResource res = new ClassPathResource("jsonschema.json");
File file = new File(res.getPath());
JsonNode mySchema = JsonLoader.fromFile(file);
Aktualizacja z 2020 r
Ponadto, jeśli chcesz na przykład odczytać plik zasobów jako ciąg znaków w swoich testach, możesz użyć tych statycznych metod narzędzi:
public static String getResourceFileAsString(String fileName) {
InputStream is = getResourceFileAsInputStream(fileName);
if (is != null) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
return (String)reader.lines().collect(Collectors.joining(System.lineSeparator()));
} else {
throw new RuntimeException("resource not found");
}
}
public static InputStream getResourceFileAsInputStream(String fileName) {
ClassLoader classLoader = {CurrentClass}.class.getClassLoader();
return classLoader.getResourceAsStream(fileName);
}
Przykład użycia:
String soapXML = getResourceFileAsString("some_folder_in_resources/SOPA_request.xml");
ClassLoader classLoader = getClass().getClassLoader(); JsonNode mySchema = JsonLoader.getJson(classLoader.getResourceAsStream("jsonschema.json"));