Я разрабатываю приложение, в котором мне нужно загрузить файл схемы (xsd) как ресурс из файла jar, но путь к файлу getClass (). GetResource («..») получает префикс с рабочим каталогом. .
Это код:
//ClassLoader classLoader = getClass().getClassLoader();
URL xsdUrl = getClass().getResource(
"/schema_" + XSD_VERSION.replace(".", "_") + ".xsd"
);
xsdUrl должен быть: file: \ D: \ NetBeansProjects \ Java \ reports_cli \ target \ reports_cli-1.0-Beta-jar-with- dependencies.jar! \ schema_1_1.xsd
Но возвращается: C: \ Users \ joao \ file: \ D: \ NetBeansProjects \ Java \ reports_cli \ target \ reports_cli-1.0 -Beta-jar-with-dependencies.jar! \ Schema_1_1.xsd
Префикс C: \ Users \ joao \ к пути к файлу
Это проект: https://github.com/joaomfrebelo/reports_core
и это файл: https://github.com/joaomfrebelo/reports_core/blob/master/src/main/java/rebelo/reports/core/parse/AParse.java
Весь код метода:
public Unmarshaller unmarshallInstance() throws SAXException, JAXBException {
LOG.trace(() -> "Create unmarshallInstance");
LOG.trace(() -> "Read xsd file");
//ClassLoader classLoader = getClass().getClassLoader();
URL xsdUrl = getClass().getResource(
"/schema_" + XSD_VERSION.replace(".", "_") + ".xsd"
);
LOG.trace(() -> "Creating JAXBContext.newInstance ");
JAXBContext jaxbContext = JAXBContext.newInstance(Rreport.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
if (xsdUrl == null) {
LOG.warn(() -> "Schema not seted please put the schema file ('schema_"
+ XSD_VERSION.replace(".", "_")
+ ".xsd' in the same folder as your java file");
} else {
File xsd = new File(xsdUrl.getFile());
if (xsd.isFile() && xsd.canRead()) {
LOG.debug(() -> "Seting xsd shema file '" + xsd.getAbsolutePath() + "'");
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(xsd);
unmarshaller.setSchema(schema);
LOG.trace(() -> "Schema seted");
} else {
LOG.debug(() -> "XSD shema path file '"
+ xsd.getAbsolutePath()
+ "' is not a file or is not readable");
}
}
return unmarshaller;
}