将Apache Jena集成到Web应用程序项目中时,InvalidPathException

时间:2019-01-08 12:11:52

标签: maven jena

我想在JSF Web应用程序中使用Jena。

我的pom.xml包含jena-arq版本3.9.0的依赖关系和JSF的依赖关系。

我用IndexView方法创建了一个init支持Bean,并用@PostConstruct进行了注释。 无需调用Jena API,一切正常。 在添加到init方法中时,此简单行 OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM); 这些异常被抛出:

javax.servlet.ServletException
...
Caused by: java.lang.ExceptionInInitializerError
...
Caused by: java.nio.file.InvalidPathException: Illegal char <:> at index 4: file:location-mapping.rdf

我试图更改与较旧版本一起使用的Jena版本,并且我注意到,直到版本2.11.0为止,一切正常。对于较新的版本,会抛出上述异常。

似乎file:前缀是问题所在。我已经找到了相关主题link,但它表示该错误已得到修复。

1 个答案:

答案 0 :(得分:0)

堆栈跟踪显示类加载器特定于环境-它正在调用org.jboss.modules.ConcurrentClassLoader.getResourceAsStream,这可能就是为什么在许多版本中未更改的代码在这里不起作用的原因。

为什么当这个类加载器是 classloader 时,它会从文件系统中抛出InvalidPathException很奇怪,并且行为与标准Java OpenJDK不同(getResourceAsStream为{{1返回null }}。

如果不需要重新映射文​​件,请尝试添加呼叫以禁用此功能:

file:location-mapping.rdf

(请注意有两个称为“ LocationMapper”的类)

并使用通话:

import org.apache.jena.util.LocationMapper;

必须在任何其他耶拿代码之前很早调用它。