Respuesta muy breve: está buscando su propiedad en el alcance de un cargador de clases en particular en lugar de su clase de destino. Esto debería funcionar:
File file = new File(getClass().getResource("jsonschema.json").getFile());
JsonNode mySchema = JsonLoader.fromFile(file);
Además, mira esto:
PD: puede haber un problema si el proyecto se compiló en una máquina y luego se lanzó en otra o si ejecuta su aplicación en Docker. En este caso, las rutas a su carpeta de recursos pueden no ser válidas. En este caso, sería mejor determinar las rutas a sus recursos en tiempo de ejecución:
ClassPathResource res = new ClassPathResource("jsonschema.json");
File file = new File(res.getPath());
JsonNode mySchema = JsonLoader.fromFile(file);
Actualización de 2020
Además de eso, si desea leer el archivo de recursos como una cadena en sus pruebas, por ejemplo, puede usar estos métodos de utilidades estáticas:
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);
}
Ejemplo de uso:
String soapXML = getResourceFileAsString("some_folder_in_resources/SOPA_request.xml");
ClassLoader classLoader = getClass().getClassLoader(); JsonNode mySchema = JsonLoader.getJson(classLoader.getResourceAsStream("jsonschema.json"));