【发布时间】:2016-04-20 21:49:28
【问题描述】:
我正在使用 Jena TDB 加载 RDF 数据集并对它进行 SPARQL 查询。我正在使用以下 Maven 依赖项:
<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>apache-jena-libs</artifactId>
<type>pom</type>
<version>3.0.1</version>
</dependency>
这是我尝试创建 TDB 数据集的 java 代码:
public void loadDirectory(String outputFile){
Dataset dataset = TDBFactory.createDataset(directoryPath);
Model tdb = dataset.getDefaultModel();
FileManager.get().readModel(tdb, outputFile);
tdb.close();
dataset.close();
LOG.info("RDF dataset loaded to memory");
}
函数的第一行失败:TDBFactory.createDataset( directoryPath ) 并带有以下错误消息:
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.sdw.model.JenaModel.loadDirectory(JenaModel.java:69)
at org.sdw.Main.main(Main.java:75)
Caused by: java.lang.NullPointerException
at org.apache.jena.tdb.sys.EnvTDB.processGlobalSystemProperties(EnvTDB.java:33)
at org.apache.jena.tdb.TDB.init(TDB.java:250)
at org.apache.jena.tdb.sys.InitTDB.start(InitTDB.java:29)
at org.apache.jena.system.JenaSystem.lambda$init$40(JenaSystem.java:114)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:179)
at org.apache.jena.system.JenaSystem.forEach(JenaSystem.java:156)
at org.apache.jena.system.JenaSystem.init(JenaSystem.java:111)
at org.apache.jena.tdb.TDBFactory.<clinit>(TDBFactory.java:40)
【问题讨论】:
-
只要运行该代码,该代码就可以正常工作。环境中可能还有更多。当 Jena jar 重新捆绑(例如 OSGi)或重新打包并且
META-INF/services/org.apache.jena.system.JenaSubsystemLifecycle文件未正确合并时,通常会发生此错误。 -
请提供一个完整的最小示例。其他人可以不加改变地运行的内容,不包含说明问题所需的内容。
-
代码没有将数据加载到内存中。
-
@AndyS,代码在使用 eclipse 时运行良好,但在从终端启动时出现此异常。我猜 Eclipse 正在自行捆绑/解决使用终端时不会发生的事情。我尝试从不同的系统启动它,但问题仍然存在。您可以从这里重现问题github.com/gone-phishing/SDW
-
我遇到了同样的问题,我不明白如何解决这个问题,我可以寻求帮助吗?
标签: java maven-3 jena apache-jena tdb