加载XSD架构JAR内通过使用资源失败
问题描述:
我的罐子内我提供我的XSD模式文件,即以下结构:加载XSD架构JAR内通过使用资源失败
myjar
- myschema.xsd
我可以验证该文件存在于当我解压JAR内部根级别它。
我加入XSD架构SchemaFactory可以通过以下方式:
public void loadXSDSchema() throws InitializationException {
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
try {
xsdSchema = sf.newSchema(new File(getClass().getClassLoader().getResource(XSD_SCHEMA_FILE).getFile()));
} catch (SAXException e) {
throw new InitializationException(ApiExceptionId.INIT_XSD_SCHEMA, e);
}
遗憾的是它没有在生产JAR文件的工作 - 我得到一个FileNotFoundException异常:
Caused by: java.io.FileNotFoundException: D:\dev\myjar.jar!\myschema.xsd (Die Syntax f▒r den Dateinamen, Verzeichnisnamen oder die Datentr▒gerbezeichnung ist falsch)
我以为我确实知道,当它被打包在一个jar中时,你需要将它作为Resource来读取,但事实表明,我似乎在做错某些事情。
任何提示我缺少什么?
答
由于它不是文件,因此无法将其作为文件获取。它是你的jar文件中的一个条目。文件是操作系统对象,从操作系统的角度来看,jar文件就是文件。虽然你可以通过ClassLoader
得到InputStream
,你可以通过这个InputStream读取它的内容。
Schema xsdSchema = sf.newSchema(new StreamSource(ClassLoader.getSystemResourceAsStream("shema.xsd")));
好吧,现在我明白了。我只知道关于资源的事情,但是,这是非常有道理的,谢谢! – Stefan