使用RDFDataMgr编写模型,但是在使用maven-assembly:assembly打包后,它将引发NullPointerException

时间:2019-04-12 03:16:31

标签: 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(固有的IDEA)进行打包之后,再将此代码导入另一个项目中,则模型编写过程将引发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为空。 使用assembly的包装有问题吗?

我尝试使用model.write(outputStream, "RDF/XML")编写模型。打包后不会引发任何异常,但是结果文件的内容与打包前缺少所有<owl ...>标签的写入结果文件有很大不同。

1 个答案:

答案 0 :(得分:1)

请参见Combining Apache Jena jars上的此页面。基本上,Jena jar文件在jar路径META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle中的文件中定义初始化步骤。用Assembly插件重新打包后,此初始化文件不存在,因此Jena初始化不完整。可以通过手动创建适当的文件或使用Maven Shade插件自动解决。