#jena
#jena
Вопрос:
Вот как я пишу свой jena.model.Model
, используя RDFDataMgr
:
try {
Lang schema = Lang.RDFXML;
// System.out.println(System.getProperty("user.dir"));
File file = new File(owlDir);
FileOutputStream outputStream = new FileOutputStream(file, false);
outputStream.write("<?xml version="1.0"?>n".getBytes());
RDFDataMgr.write(outputStream, model, schema);
outputStream.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
До упаковки этот код работал нормально.
Но после упаковки с использованием maven-assembly:assembly(внутренняя ИДЕЯ), а затем импортировать этот код в другой проект, процесс записи модели выдает исключение NullPointerException .
java.lang.NullPointerException
at org.apache.jena.riot.RDFWriterBuilder.build(RDFWriterBuilder.java:137)
at org.apache.jena.riot.RDFWriterBuilder.output(RDFWriterBuilder.java:149)
at org.apache.jena.riot.RDFDataMgr.write$(RDFDataMgr.java:1260)
at org.apache.jena.riot.RDFDataMgr.write(RDFDataMgr.java:1053)
at org.apache.jena.riot.RDFDataMgr.write(RDFDataMgr.java:1044)
at org.apache.jena.riot.RDFDataMgr.write(RDFDataMgr.java:985)
at seu.edu.kse.tools.ModelSaver.save2owl(ModelSaver.java:126)
at Main.main(Main.java:20)
ModelSaver.java:126:
RDFDataMgr.write(outputStream, model, schema);
ARQ.globalContext
в пакете org.apache.jena.query
null .
Что-то не так с использованием упаковки assembly
?
Я попытался использовать model.write(outputStream, "RDF/XML")
для написания модели. Это не создает исключений после упаковки, но содержимое результирующего файла сильно отличается от результирующего файла, записанного перед упаковкой, со всеми <owl ...>
отсутствующими тегами.
Ответ №1:
Смотрите Эту страницу об объединении Apache Jena jars. По сути, файлы Jena jar определяют шаги инициализации в файле, который находится по пути META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle
в jar. После переупаковки с помощью плагина Assembly этот файл инициализации отсутствует, и, следовательно, инициализация Jena является неполной. Это можно решить, создав соответствующий файл вручную или автоматически с помощью плагина Maven Shade.