class DataBridgeManifestReader {

    public M readJsonManifest(File jsonManifestFile) throws IOException, IllegalArgumentException
    {
        // Verify that the file exists and can be read.
        HerdFileUtils.verifyFileExistsAndReadable(jsonManifestFile);

        // Deserialize the JSON manifest.
        BufferedInputStream buffer = new BufferedInputStream(new FileInputStream(jsonManifestFile));
        BufferedReader reader = new BufferedReader(new InputStreamReader(buffer, Charsets.UTF_8));
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
        objectMapper.setVisibility(PropertyAccessor.GETTER, Visibility.NONE);
        objectMapper.setVisibility(PropertyAccessor.SETTER, Visibility.NONE);
        M manifest = getManifestFromReader(reader, objectMapper);

        // Validate the manifest and return it.
        validateManifest(manifest);
        return manifest;
    }

}