我想在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,但它表示该错误已得到修复。
答案 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;
必须在任何其他耶拿代码之前很早调用它。